spring boot配置文件

来源:互联网 发布:访问虚拟机nginx失败 编辑:程序博客网 时间:2024/06/05 09:37
spring boot采纳了建立生产就绪Spring应用程序的观点。spring boot自动配置自带了很多配置类。默认会启动自带的配置,即使你没有在配置文件中配置任何属性也会正常运行。但是通常,默认的配置无法满足我们自己的需求,这时候我们就需要在配置文件中微调我们的配置属性。在这里我们举一个简单的例子,spring boot 在启动的时候会有一副“画”,如果你想要禁用这个Banner,就可以在配置文件中将spring.main.show-banner设置为false。当然还有其他的方法,比如在运行程序的命令行参数里指定:$ java -jar {$jarName}-0.0.1-SNAPSHOT.jar --spring.main.show-banner=false另外可以在application.propertie或者application.yml文件中设置例如在application.yml中配置:
spring:    main:        show-banner: false

另外也可以改变环境变量,当然就作者而言就喜欢用的就是在配置文件中指定了,方便嘛!

实际上,Spring boot应用程序有多种设置途径。包括如下几处:1.命令行参数2.java:comp/env里的JNDI属性3.JVM系统参数4.操作系统环境变量5.随机生成的带random.*前缀的属性(在设置其他属性时,可以引用它们,比如${random.long})6.应用程序以外的application.properties或者application.yml文件7.打包在应用程序内的application.properties或者application.yml文件8.通过@PropertySource标注的属性源9.默认属性

同样,这个列表也是有优先级的,优先级自上而下,高优先级会覆盖低优先级。
application.properties和application.yml文件能放在一下四个位置:
(1)外置,在相对于应用程序运行目录的/config子目录。
(2)外置,在应用程序运行的目录里。
(3)内置,在config包内。
(4)内置,在Classpath根目录。
此外,config目录优先级高于Classpath根目录优先级,同一目录下yml配置文件中的属性优先级高于properties

这里讲一下如何替换Sprint boot启动时候的动画,只需要在resources目录下创建一个Banner.txt文件,那么程序启动时候会读取Banner.txt的内容,同样在txt文件中加上${AnsiColor.BLUE}则可以将图画颜色变为蓝色。可以看AnsiColor.java源码,在其中挑选自己想要的颜色。这里博主用了

....∵ ∴★ ∴∵∴ ╭ ╯╭ ╯╭ ╯╭ ╯╭ ╯∴∵∴∵∴

.☆.∵∴∵.∴∵∴▍▍ ▍▍ ▍▍ ▍▍ ▍▍☆ ★∵∴

▍.∴∵∴∵.∴▅█████████████████████☆ ★∵

◥█▅▅▅▅███████▅█▅█▅█▅█▅█▅██████████◤

. ◥█████████████████████████████◤

....◥████████████████████████■◤
寓意驶往大海, 向往自由
接下来讲解一下如何在代码中获取配置文件中的属性,以yml配置文件举例:
1.简单的获取配置文件单值
只需要一个@Value(“user.address”)即可在属性上注入配置文件中的值

@Value("${user.address}")private String address;

2.应用程序的bean外置

首先创建一个ExampleProperties.java类,在这个类中只要一个address地址属性(简单点来嘛)

@Component@ConfigurationProperties(prefix = "user")public class ExampleProperties {    private String address;    public String getAddress() {        return address;    }    public void setAddress(String address) {        this.address = address;    }}

在这个类上需要加上@Component注解进行注入,接下来最重要的还是@ConfigurationProperties(prefix = “user”)注解,注意:改address的值实际是由setter方法注入的哟,prefix很好理解,就是配置文件中的属性前缀,在配置文件中的格式则为:

user:  address: 杭州
/**还有一点要注意的地方就是从技术上来说,@ConfigurationProperties注解默认是不会生效的,除非先向spring配置类添加@EnableConfiguationProperties注解。但通常无需这么做,因为Spring Boot 自动配置后面的全部配置类都已经加上了@EnableConfiguationProperties,除非你不使用自动配置,否则就需要显式添加@EnableConfiguationProperties注解。**/

我们只需要交由spring注入即可使用

@Autowired    private ExampleProperties exampleProperties; //

3.自定义配置文件
当我们属性的配置单独写在另一个配置文件当中时:如写了一个User.yml文件内容与上面相同,这时候,我们就需要通过

@Configuration@PropertySource("classpath:user.properties")@ConfigurationProperties(prefix = "user")

来指定我们想要获取的配置文件,注意上面我用了.properties的配置文件,博主刚开始的时候也是给自己挖了个坑,用yml的文件怎么都获取不到值,搞了好久,后来google了才发现@PropertySource这个注解只能获取properties配置文件,这个是属于spring的注解。如果想要使用yml的配置文件,就需要实现PropertySourceFactory类,代码如下:

public class YamlPropertySourceFactory implements PropertySourceFactory {    @Override    public PropertySource<?> createPropertySource(String name, EncodedResource resource) throws IOException {        return name != null ? new PropertySourcesLoader().load(resource.getResource(), name, null) : new PropertySourcesLoader().load(                resource.getResource(), getNameForResource(resource.getResource()), null);    }    private static String getNameForResource(Resource resource) {        String name = resource.getDescription();        if (!StringUtils.hasText(name)) {            name = resource.getClass().getSimpleName() + "@" + System.identityHashCode(resource);        }        return name;    }}

之后在bean上加上

@PropertySource(value = "classpath:user.yml",factory=YamlPropertySourceFactory.class)//指定factory

指定文件路径与加载类,即可读取到yml配置文件啦!

原创粉丝点击