spring boot基础(1)

1:配置文件的加载方式

      加载properties配置文件方式:

package com.edu.spring.springboot;

import org.springframework.context.annotation.Configuration;
import org.springframework.context.annotation.PropertySource;
import org.springframework.context.annotation.PropertySources;

/**
 * 加载外部的配置
 * PropertySource 可以加载一个外部的配置(当然了,可以注解多次)
 * @PropertySources 可以加载多个外部配置
 * @author hadoop
 *
 */
@Configuration
//@PropertySource("classpath:jdbc.properties")
//@PropertySource("file:/e:/tmp/jdbc.properties")
@PropertySources({@PropertySource("classpath:jdbc.properties")})
public class FileConfig {

}

  加载application中的配置变量:

package com.edu.spring.springboot;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.context.annotation.PropertySource;
import org.springframework.core.env.Environment;
import org.springframework.stereotype.Component;

/**
 * 两种获取配置的方法
 * 配置文件默认的文件名字为application.properties,
 * 默认的位置在classpath根目录,或者classpath:/config,file:/, file:config/
 * 
 * 默认的配置文件名字可以使用--spring.config.name来指定,只需要指定文件的名字,文件扩展名可以省略
 * 默认的配置文件路径可以使用--spring.config.location来指定,配置文件需要指定全路径,包括目录和文件名字,还可以指定多个,多个用逗号隔开
 * 文件的指定方式有两种,1:classpath:2:file:
 */
@Component
public class UserConfig {
    
    @Value("${local.port}")
    private String localPort;
    
    @Value("${local.port}")
    private Integer localPort2;
    
    /**
     * @Value默认必须要有配置项,配置项可以为空。如果没有配置项,则可以给默认值
     */
    @Value("${tomcat.port:9090}")
    private String tomcatPort;
    
    @Autowired
    private Environment env;
    
    public void show(){
        System.out.println("local.ip=" + env.getProperty("local.ip"));
        System.out.println("local.port=" + env.getProperty("local.port", Integer.class));
        System.out.println("tomcatPort=" + tomcatPort);
        System.out.println("local.port=" + localPort);
        System.out.println("local.port2=" + localPort);
        System.out.println("name=" + env.getProperty("name"));
        System.out.println("app.name=" + env.getProperty("app.name"));
    }
}

 

2:配置profile的使用

 

    在application中通过配置  spring.profiles.active可以切换配置文件:

spring.profiles.active=test

ds.hosts[0]=192.168.1.100
ds.hosts[1]=192.168.1.100
ds.hosts[2]=192.168.1.100

ds.ports[0]=8060
ds.ports[1]=8070
ds.ports[2]=8080
ds.ports[3]=8090

测试类如下:

package com.edu.spring.springboot;

import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.context.annotation.Profile;

@Configuration
//@Profile("prod")
public class MyConfig {

    @Bean
    @Profile("prod")
    public Runnable createRunnable(){
        System.out.println("=====1=====");
        return () -> {};
    }
    
    @Bean
    @Profile("test")
    public Runnable createRunnable2(){
        System.out.println("=====2=====");
        return () -> {};
    }
    
    @Bean
    @Profile("dev")
    public Runnable createRunnable3(){
        System.out.println("=====3=====");
        return () -> {};
    }
}

当配置 spring.profiles.active=test 自动调用 @Profile("test")生成bean对象

 

3:通过EnvironmentPostProcessor动态配置环境变量

org.springframework.boot.env.EnvironmentPostProcessor=com.edu.spring.springboot.MyEnvironmentPostProcessor

   增加spring.factories配置文件如下:

 

package com.edu.spring.springboot;

import java.io.FileInputStream;
import java.io.IOException;
import java.io.InputStream;
import java.util.Properties;

import org.springframework.boot.SpringApplication;
import org.springframework.boot.env.EnvironmentPostProcessor;
import org.springframework.core.env.ConfigurableEnvironment;
import org.springframework.core.env.PropertiesPropertySource;

public class MyEnvironmentPostProcessor implements EnvironmentPostProcessor {
    public void postProcessEnvironment(ConfigurableEnvironment environment, SpringApplication application) {
        try(InputStream input = new FileInputStream("C:\\Users\\76524\\Downloads\\SpringBoot快速入门\\Spring Boot快速入门\\src\\main\\resource\\application-default.properties")){
            Properties source = new Properties();
            source.load(input);
            PropertiesPropertySource propertySource = new PropertiesPropertySource("my", source);
            environment.getPropertySources().addLast(propertySource);
        }catch(IOException e){
            e.printStackTrace();
        }
    }
}

 

4:精确配置类  @Condition注解使用

    参考资料:https://blog.csdn.net/qq_26525215/article/details/53510156

    @ConditionalOnProperty  @ConditionalOnClass @ConditionalOnBean使用

   

package com.edu.spring.springboot;

import org.springframework.boot.SpringBootConfiguration;
import org.springframework.boot.autoconfigure.condition.ConditionalOnBean;
import org.springframework.boot.autoconfigure.condition.ConditionalOnClass;
import org.springframework.boot.autoconfigure.condition.ConditionalOnProperty;
import org.springframework.context.annotation.Bean;


@SpringBootConfiguration
public class UserConfiguration {

    /**
     * 表示,某个属性等于某个值的时候,才装配
     * @return
     */
    @Bean
    @ConditionalOnProperty(name = "runnable.enabled", havingValue="true", matchIfMissing=true)
    public Runnable createRunnable(){
        return () -> {};
    }
    
    /**
     * 表示classpath中是否存在某个class的时候才装配
     * @ConditionalOnClass 存在
     * @ConditionalOnMissingClass 不存在
     * @return
     */
    @Bean
    @ConditionalOnClass(name = "com.google.gson.Gson")
    public Runnable createGsonRunnable(){
        return () -> {};
    }
    
    /**
     * 根据容器中存在是否存在某个bean来进行装配
     * @ConditionalOnMissingBean 不存在
     * @ConditionalOnBean 存在
     * @return
     */
    @Bean
    @ConditionalOnBean(name="user")
    public Runnable createBeanRunnable(){
        return () -> {};
    } 
}

 

posted on 2018-04-14 22:36  tarimengyan  阅读(128)  评论(0)    收藏  举报

导航