澳门金沙vip 7

mysql源码解读之配置文件

Spring
Boot允许外化(externalize)你的配置,这样你能够在不同的环境下使用相同的代码。

你可以使用properties文件,YAML文件,环境变量和命令行参数来外化配置。使用@Value注解,可以直接将属性值注入到你的beans中,并通过Spring的Environment抽象或绑定到结构化对象来访问。

澳门金沙vip 1


澳门金沙vip 2

 

澳门金沙vip 3

1.springboot项目内读取配置文件的属性值

springboot 默认读取src\main\resources\澳门金沙vip,application.properties;

例如:

我们在配置文件中准备了2个配置字段,如下:

com.zjt.welcomeWords01="你好,我是com.zjt.welcomeWords01"
com.zjt.welcomeWords02="你好,我是com.zjt.welcomeWords02"

 我想要在controller中读取到这连个配置文件的值,并通过rest返回到前台,我们可以直接在controller中定义变量,

并在变量上声明一个这样的注解:  @Value(value=”${com.zjt.welcomeWords01}”),便可获取到配置文件中的值。

如:这样编写controller:

@RestController
public class Controller01 {

    @Value(value="${com.zjt.welcomeWords01}")
    private String word01;
    @Value(value="${com.zjt.welcomeWords02}")
    private String word02;

    @ResponseBody
    @RequestMapping("test01")
    public String test01(){
        System.out.println("word01:"+word01);
        return "word01:"+word01;
    }

    @ResponseBody
    @RequestMapping(value = "test02", produces = "application/json; charset=UTF-8")
    public String test02(){
        System.out.println("word02:"+word02);
        return "word02:"+word02;
    }
}

 访问:

 澳门金沙vip 4

访问:

澳门金沙vip 5

注意,如果你用的也是IDEA的话,在springboot读取配置文件的环节,可能会使用Unicode读取,造成乱码;所以,要配置一下IDEA字符集:

澳门金沙vip 6

这里需要额外说一下:我们在使用springboot的@RestController注解时,如果不对@RequestMapping的produces属性进行定义,则默认会返回text/html的Content-Type;

如果你的项目环境接口调试时要求必须是application/json的Content-Type,你可以像我上面的controller中写的那样定义produces属性;

上面说的是在字段中通过@value注解来获取配置文件的值,当你的配置文件中有n个互相关联的属性需要读取的时候,我们可以使用配置文件实体bean的方式将配置文件的相关值加载到bean中,再通过bean的属性来获取值:

我们由此,先新建配置bean,注意使用@ConfigurationProperties(prefix =
“com.zjt”),来指定配置文件字段的前缀,bean的字段名要与配置文件属性名称完全一致:

@ConfigurationProperties(prefix = "com.zjt")
public class ConfigBean01 {
    private String word01;
    private String word02;

    public String getWord01() {
        return word01;
    }
    public void setWord01(String word01) {
        this.word01 = word01;
    }
    public String getWord02() {
        return word02;
    }
    public void setWord02(String word02) {
        this.word02 = word02;
    }
}

 

这样,我们就把配置文件的字段加载到了配置文件bean中,但要想使得该配置文件在IOC容器中注册bean,且让@ConfigurationProperties注解生效的话,还需要在main启动类中添加这样的注解:@EnableConfigurationProperties({ConfigBean01.class}),注意要指定配置文件的类名,如下:

@SpringBootApplication
@EnableConfigurationProperties({ConfigBean01.class})
public class Chapter02Application {

    public static void main(String[] args) {
        SpringApplication.run(Chapter02Application.class, args);
    }
}

 

 这样在项目启动的时候会将配置文件类ConfigBean01.java的bean对象加载到IOC容器中,并使得ConfigBean01的@ConfigurationProperties注解有效,来读取配置文件的值,并绑定到字段中;

下面我们就可以在controller中调用配置文件bean了:

@RestController
public class Controller01 {

    @Value(value="${com.zjt.welcomeWords01}")
    private String word01;
    @Value(value="${com.zjt.welcomeWords02}")
    private String word02;

    @Autowired
    private ConfigBean01 configBean01;

    @ResponseBody
    @RequestMapping("test01")
    public String test01(){
        System.out.println("word01:"+word01);
        return "word01:"+word01;
    }

    @ResponseBody
    @RequestMapping(value = "test02", produces = "application/json; charset=UTF-8")
    public String test02(){
        System.out.println("word02:"+word02);
        return "word02:"+word02;
    }

    @ResponseBody
    @RequestMapping(value = "test03", produces = "application/json; charset=UTF-8")
    public String test03(){
        System.out.println("word01+word02:"+word01+word02);
        return "word01+word02:"+word01+word02;
    }
}

 

 访问:

澳门金沙vip 7

可以看到,我们已经很轻松的获取到了配置文件的值;

至此,我们已经可以很轻松的通过@value以及通过配置文件bean的方式来获取配置文件的值;