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) 收藏 举报
浙公网安备 33010602011771号