Spring Boot学习--资源配置

来源:互联网 发布:淘宝店铺转让 淘铺王 编辑:程序博客网 时间:2024/06/06 06:59

这部分内容主要对应官网文档的第24部分Externalized Configuration,我也不知道怎么来准确翻译这个东西。这块涉及到的是配置文件中的环境变量的相关内容。

按照官方的意思是,Spring Boot提供了多种换取环境变量或者配置信息的方式。如properties 文件YAML文件,环境变量和客户端指令等。你可以通过@Value注解和@ConfigurationProperties来获取这些信息。

废话少说,我们来看下具体内容,优先级依次降低的:

 1. Devtools global settings properties on your home directory (~/.spring-boot-devtools.properties when devtools is active). 2. @TestPropertySource annotations on your tests. 3. @SpringBootTest#properties annotation attribute on your tests. 4. Command line arguments. 5. Properties from SPRING_APPLICATION_JSON (inline JSON embedded in an environment variable or system property) 6. ServletConfig init parameters. 7. ServletContext init parameters. 8. JNDI attributes from java:comp/env. 9. Java System properties (System.getProperties()). 10. OS environment variables. 11. A RandomValuePropertySource that only has properties in random.*. 12. Profile-specific application properties outside of your packaged jar (application-{profile}.properties and YAML variants) 13. Profile-specific application properties packaged inside your jar (application-{profile}.properties and YAML variants) 14. Application properties outside of your packaged jar (application.properties and YAML variants). 15. Application properties packaged inside your jar (application.properties and YAML variants). 16. @PropertySource annotations on your @Configuration classes. 17. Default properties (specified using SpringApplication.setDefaultProperties).

上面这些东西,一般阅读起来应该是没问题的,下面我们来看下其中的一些用法,有些我感觉用的少的也不会在这里讲了。

文档中首先给出的是一个通过@Value来获取值得示例,下面是我更改之后的:

/** * Created by pangkunkun on 2017/9/5. */@Componentpublic class MyBean implements CommandLineRunner{    @Value("${name}")    private String name;    @Override    public void run(String... args){        System.out.println("name:"+name);    }}

为了能够直接验证,我实现了CommandLineRunner接口,启动的时候直接就能看到效果。
添加个application.properties文件,并加入name的信息:

name=pangkun

启动项目就可以看到如下信息:

2017-09-05 14:26:50.347  INFO 4816 --- [           main] o.s.j.e.a.AnnotationMBeanExporter        : Registering beans for JMX exposure on startup2017-09-05 14:26:50.398  INFO 4816 --- [           main] o.s.b.w.embedded.tomcat.TomcatWebServer  : Tomcat started on port(s): 8080 (http)name:pangkun2017-09-05 14:26:50.401  INFO 4816 --- [           main] s.e.configuration.MyConfigApplication    : Started MyConfigApplication in 1.994 seconds (JVM running for 3.516)

这里的name:pangkun就是从配置文件中获取到的信息。

接下来官方给出的是:

java -jar app.jar --name="Spring"

这是需要先把项目打包,然后执行,这里的name会覆盖application.properties文件中的信息。

前面有说过打包成jar的方法,这里再演示下,切换到项目的目录,运行mvn package指令:
这里写图片描述
我这里用的是git的工具,直接cmd用dos也是可以的。
这里写图片描述
执行成功之后在target文件夹中会看到项目的jar包MyConfig-1.0-SNAPSHOT.jar。

在客户端中执行:

java -jar MyConfig-1.0-SNAPSHOT.jar --name="Spring"

会看到name输出的值为Spring。

SPRING_APPLICATION_JSON方式传递信息:

SPRING_APPLICATION_JSON='{"foo":{"bar":"spam"}}' java -jar MyConfig-1.0-SNAPSHOT.jar

修改代码:

@Componentpublic class MyBean implements CommandLineRunner{    @Value("${name}")    private String name;    @Value("${foo.bar}")    private String fooBar;    @Override    public void run(String... args){        System.out.println("name:"+name);        System.out.println("fooBar:"+fooBar);    }}

也可以改为以下两种方式:

java -Dspring.application.json='{"foo":"bar"}' -jar MyConfig-1.0-SNAPSHOT.jarjava -jar MyConfig-1.0-SNAPSHOT.jar --spring.application.json='{"foo":"bar"}'

文档也也有说明JNDI 这种方式:

java:comp/env/spring.application.json

但是这个东西我没玩过,还是不说了,有弄过的朋友可以给我留言。

有关项目的配置文件部分可以参考我以前的文章Springboot引用外部配置文件。

同时配置多个环境下的配置文件,可以采用

application-{profile}.properties

如,开发环境application-dev.properties,生产环境application-prod.properties,在application.properties中指定要使用的配置文件:

spring.profiles.active=dev
原创粉丝点击