springboot之properties

来源:互联网 发布:名侦探柯南手表淘宝 编辑:程序博客网 时间:2024/06/14 09:15

本例将采用maven管理,代码托管在github上,地址:https://github.com/wolf909867753/springboot。

1。创建maven-module,properties,并在pom.xml中添加springboot依赖


<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"         xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd">    <modelVersion>4.0.0</modelVersion>    <artifactId>properties</artifactId>    <packaging>war</packaging>    <name>springboot-properties Demo</name>    <url>http://maven.apache.org</url>    <!-- Spring Boot 启动父依赖 -->    <parent>        <groupId>org.springframework.boot</groupId>        <artifactId>spring-boot-starter-parent</artifactId>        <version>1.5.1.RELEASE</version>    </parent>    <dependencies>        <!-- Spring Boot Web 依赖 -->        <dependency>            <groupId>org.springframework.boot</groupId>            <artifactId>spring-boot-starter-web</artifactId>        </dependency>        <dependency>            <groupId>junit</groupId>            <artifactId>junit</artifactId>            <version>4.12</version>            <scope>test</scope>        </dependency>    </dependencies>    <build>        <finalName>properties</finalName>    </build></project>

工程目录如下:


代码参考github code


使用application.properties配置文件加载的测试DEMO
        参考com.springboot.properties此包下的code
1.创建HomeProperties类

@Component@ConfigurationProperties(prefix="home")public class HomeProperties {    /**     * 省份     */    private String province;    /**     * 城市     */    private String city;    /**     * 描述     */    private String desc;    getter/setter.....
}

2.配置文件
    application-pro.properties

      home.province = shang dong sheng      home.city = wei fang shi      home.desc = [application-pro] i come from ${home.province} ${home.city}.

    application-dev.properties

      home.province = shandong      home.city = weifang      home.desc = [application-dev] i come from ${home.province}--${home.city}

    application.properties

      spring.profiles.active=pro

3.测试
    参考test下com.springboot.properties.PropertiesTest.java


@SpringBootApplicationpublic class PropertiesTest implements CommandLineRunner{    @Autowired    private HomeProperties homeProperties;    @Override    public void run(String... strings) throws Exception {        System.out.println(">>>>>>>>>>>>>>  "+homeProperties.toString());    }    /**     * 使用application.yml运行输出以下结果:     *  HomeProperties{province='山东省', city='潍坊市', desc='我来自山东省潍坊市.'}     *     *  使用application.properties根据spring.profiles.active的value运行加载其对应的application-*.properties输出以下结果:     *  HomePropertiesYML{province='shang dong sheng', city='wei fang shi', desc='[application-pro] i come from shang dong sheng wei fang shi.'}     */    public static void main(String[] args) {        SpringApplication.run(PropertiesTest.class,args);    }}


运行main方法,加载使用application.properties根据spring.profiles.active的value运行加载其对应的application-*.properties输出以下结果:
HomeProperties{province='shang dong sheng', city='wei fang shi', desc='[application-pro] i come from shang dong sheng wei fang shi.'}


=======================================================================================


使用application.yml配置文件加载的测试DEMO
 参考com.springboot.properties此包下的code
1.创建HomePropertiesYML.java

@Componentpublic class HomePropertiesYML {    /**     * 省份     */    @Value("${home.province}")    private String province;    /**     * 城市     */    @Value("${home.city}")    private String city;    /**     * 描述     */    @Value("${home.desc}")    private String desc;    getter/setter....
}
2.配置文件
    application.yml 注意项目下不能同时存在application.properties 和 application.yml
    
home:  province : 山东省  city : 潍坊市  desc : 我来自${home.province}${home.city}.

    
3.测试
    参考test下com.springboot.properties.YMLpropertiesTest.java
    
@SpringBootApplicationpublic class YMLpropertiesTest implements CommandLineRunner {    @Autowired    private HomePropertiesYML homePropertiesYML;    @Override    public void run(String... strings) throws Exception {        System.out.println(">>>>>>>>>>>> "+homePropertiesYML.toString());    }    /**     * 使用application.yml运行输出以下结果:     *  HomePropertiesYML{province='山东省', city='潍坊市', desc='我来自山东省潍坊市.'}     *     *  使用application.properties根据spring.profiles.active的value运行加载其对应的application-*.properties输出以下结果:     *  HomePropertiesYML{province='shang dong sheng', city='wei fang shi', desc='[application-pro] i come from shang dong sheng wei fang shi.'}     */    public static void main(String[] args) {        SpringApplication.run(YMLpropertiesTest.class,args);//        System.exit(-1);    }}

运行main方法,加载使用application.yml配置文件,输出以下结果:
 HomePropertiesYML{province='山东省', city='潍坊市', desc='我来自山东省潍坊市.'}

小结:

/** * Spring Boot 配置文件 使用application.properties * 测试类参考test目录下的PropertiesTest.java *一、自动配置 *   Spring Boot 提供了对应用进行自动化配置。相比以前 XML 配置方式,很多显式方式申明是不需要的。二者,大多数默认的配置足够实现开发功能,从而更快速开发。 *   什么是自动配置? *   Spring Boot 提供了默认的配置,如默认的 Bean ,去运行 Spring 应用。它是非侵入式的,只提供一个默认实现。 *   大多数情况下,自动配置的 Bean 满足了现有的业务场景,不需要去覆盖。但如果自动配置做的不够好,需要覆盖配置。 *   比如通过命令行动态指定某个 jar ,按不同环境启动。那怎么办?这里先要考虑到配置的优先级。 * *   Spring Boot 不单单从 application.properties 获取配置,所以我们可以在程序中多种设置配置属性。按照以下列表的优先级排列: *  1.命令行参数 *   2.java:comp/env 里的 JNDI 属性 *   3.JVM 系统属性 *   4.操作系统环境变量 *   5.RandomValuePropertySource 属性类生成的 random.* 属性 *   6.应用以外的 application.properties(或 yml)文件 *    7.打包在应用内的 application.properties(或 yml)文件 *    8.在应用 @Configuration 配置类中,用 @PropertySource 注解声明的属性文件 *   9.SpringApplication.setDefaultProperties 声明的默认属性 * *    可见,命令行参数优先级最高。这个可以根据这个优先级,可以在测试或生产环境中快速地修改配置参数值,而不需要重新打包和部署应用。 *   还有第 6 点,根据这个在多 moudle 的项目中,比如常见的项目分 api 、service、dao 等 moudles,往往会加一个 deploy moudle 去打包该业务各个子 moudle, *   应用以外的配置优先。 * * 二.@ConfigurationProperties(prefix="home") *  通过 @ConfigurationProperties(prefix = “home”) 注解,将配置文件中以 home 前缀的属性值自动绑定到对应的字段中。 *  同是用 @Component 作为 Bean 注入到 Spring 容器中。 * *  注意:当reources中同时存在application.properties ,application.yml文件时,spring优先启动application.properties配置文件 */

多环境配置    很多场景的配置,比如数据库配置、Redis 配置、注册中心和日志配置等。在不同的环境,我们需要不同的包去运行项目。所以看项目结构,有两个环境的配置:    application-dev.properties:开发环境    application-prod.properties:生产环境    Spring Boot 是通过 application.properties 文件中,设置 spring.profiles.active 属性,比如 ,配置了 dev ,则加载的是 application-dev.properties :    # Spring Profiles Active    spring.profiles.active=dev    那运行PropertiesTest应用启动类,从控制台中可以看出,是加载了 application-dev.properties 的属性输出:    HomeProperties{province='shang dong', city='wei fang', desc='[application-dev] i come from shang dong wei fang.'}    将 spring.profiles.active 设置成 prod,重新运行,可得到 application-pro.properties的属性输出:    HomeProperties{province='shang dong sheng', city='wei fang shi', desc='[application-pro] i come from shang dong sheng wei fang shi.'}    根据优先级,顺便介绍下 jar 运行的方式,通过设置 -Dspring.profiles.active=pro 去指定相应的配置:    mvn package    java -jar -Dspring.profiles.active=prod springboot-properties-0.0.1-SNAPSHOT.jar

原创粉丝点击