直接上代码:
package com.ly.learnSpringboot;
import java.util.HashSet;
import java.util.List;
import java.util.Set;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.context.ConfigurableApplicationContext;
import org.springframework.context.annotation.Bean;
/**
* Hello world!
*
*/
@SpringBootApplication
public class App
{
public static void main(String[] args) {
// ConfigurableApplicationContext context = SpringApplication.run(App2.class, args);
SpringApplication application = new SpringApplication();
Set<Object> source = new HashSet<Object>();
source.add(App.class);
application.setSources(source);
ConfigurableApplicationContext context = application.run(args);
Runnable run = context.getBean(Runnable.class);
run.run();
System.out.println(context.getBean(User.class));
App2 a2 = context.getBean(App2.class);
a2.console();
System.out.println(context.getBean(MyConfig.class).createList());
UserConfig uc = context.getBean(UserConfig.class);
uc.show();
System.out.println("name=" + context.getEnvironment().getProperty("name"));
System.out.println("appName=" + context.getEnvironment().getProperty("app.name"));
JdbcUse ju = context.getBean(JdbcUse.class);
ju.show();
DataSourceProperties dsp = context.getBean(DataSourceProperties.class);
dsp.show();
/**
* 通过MyEnvironmentPostProcessor
*/
System.out.println("testName=" + context.getEnvironment().getProperty("testName"));
/**
* 通过application-test 注册
*/
System.out.println("testIp=" + context.getEnvironment().getProperty("test.ip"));
}
@Bean
public Runnable createRunnable(){
return () ->{ System.out.println("StringBoot is started");};
}
}
package com.ly.learnSpringboot;
import java.util.List;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Component;
@Component
public class App2 {
@Autowired
private List<Object> list;
public void console(){
System.out.println(list);
}
}
package com.ly.learnSpringboot;
import java.util.ArrayList;
import java.util.List;
import org.springframework.boot.context.properties.ConfigurationProperties;
import org.springframework.stereotype.Component;
@Component
@ConfigurationProperties(prefix="ds", locations="classpath:jdbc/jdbc.yml")
public class DataSourceProperties {
private List<String> hosts = new ArrayList<>();
private String url;
private String driverClassName;
private String userName;
private String password;
public void show(){
System.out.println("=====================JDBC配置=========================");
int i = 0;
for(String host : hosts){
i++;
System.out.println("host" + i + ":" + host);
}
System.out.println("ds.jdbcUrl:" + url);
System.out.println("ds.jdbcDriverClassName:" + driverClassName);
System.out.println("ds.userName:" + userName);
System.out.println("ds.password:" + password);
}
public List<String> getHosts() {
return hosts;
}
public void setHosts(List<String> hosts) {
this.hosts = hosts;
}
public String getUrl() {
return url;
}
public void setUrl(String url) {
this.url = url;
}
public String getDriverClassName() {
return driverClassName;
}
public void setDriverClassName(String driverClassName) {
this.driverClassName = driverClassName;
}
public String getUserName() {
return userName;
}
public void setUserName(String userName) {
this.userName = userName;
}
public String getPassword() {
return password;
}
public void setPassword(String password) {
this.password = password;
}
}
package com.ly.learnSpringboot;
import org.springframework.context.annotation.Configuration;
import org.springframework.context.annotation.PropertySource;
import org.springframework.context.annotation.PropertySources;
@Configuration
//@PropertySource("classpath:jdbc/jdbc.properties")
//@PropertySource("classpath:jdbc/jdbc2.properties")
@PropertySources({@PropertySource("classpath:jdbc/jdbc.properties"),@PropertySource("classpath:jdbc/jdbc2.properties")})
public class JdbcConfig {
}
package com.ly.learnSpringboot;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.stereotype.Component;
@Component
public class JdbcUse {
@Value("${jdbc.url}")
private String url;
@Value("${jdbc.driverClassName}")
private String driverClassName;
@Value("${jdbc.userName}")
private String userName;
@Value("${jdbc.password}")
private String password;
public void show(){
System.out.println("=====================JDBC配置=========================");
System.out.println("jdbcUrl:" + url);
System.out.println("jdbcDriverClassName:" + driverClassName);
System.out.println("userName:" + userName);
System.out.println("password:" + password);
}
}
package com.ly.learnSpringboot;
import java.util.ArrayList;
import java.util.List;
import org.springframework.boot.SpringBootConfiguration;
import org.springframework.context.annotation.Bean;
@SpringBootConfiguration
public class MyConfig {
@Bean
public List<Object> createList(){
return new ArrayList<>();
}
}
package com.ly.learnSpringboot;
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;
import org.springframework.core.env.PropertySource;
import org.springframework.stereotype.Component;
/**
* 注意该方法,需要先把类注册到META-INF/spring.factories中去
* @author liuyo
*
*/
@Component
public class MyEnvironmentPostProcessor implements EnvironmentPostProcessor {
@Override
public void postProcessEnvironment(ConfigurableEnvironment environment, SpringApplication application) {
try(InputStream is = new FileInputStream("D:/tmp/test.properties")){
Properties myProperty = new Properties();
myProperty.load(is);
PropertySource propertySource = new PropertiesPropertySource("my", myProperty);
environment.getPropertySources().addLast(propertySource);
}
catch(IOException e){
e.printStackTrace();
}
}
}
package com.ly.learnSpringboot;
import org.springframework.stereotype.Component;
@Component
public class User {
}
package com.ly.learnSpringboot;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.core.env.Environment;
import org.springframework.stereotype.Component;
/**
* 配置属性的两种读取方式
* @author liuyo
* 配置文件的默认位置在classpath下的application.properties或者是application.yml。
* 或者是config文件夹下的application.properties或者是application.yml 还有file:/ 或者是file:/config
* 默认的配置文件的名字可以使用 --spring.config.name=配置文件的新名字来指定自己命名的配置文件。文件的
* 扩展名可以省略
* 默认的配置文件路径可以使用 --spring.config.location= 文件的路径和全名,可以有多个, 格式如:
* classpath:/conf/app.yml, file:E:/cof/app2.yml
*/
@Component
public class UserConfig {
@Value("${local.port}")
private String port;
/**
* 属性设置默认值, 如果在application中没有配置该属性,那么该属性的默认值就是9000
*/
@Value("${tomcat.port:9000}")
private String tomcatPort;
@Autowired
private Environment enviroment;
public void show(){
System.out.println("localId=" + enviroment.getProperty("local.ip"));
System.out.println("localPort=" + port);
System.out.println("tomcatPort=" + tomcatPort);
}
}
按顺序复制的:
jdbc.url = jdbc:mysql:///springboot
jdbc.driverClassName = com.mysql.jdbc.driver
ds:
url: jdbc:mysql:///springboot
driverClassName: com.mysql.jdbc.driver
userName: liuyo
password: 123456789
hosts:
- 192.168.1.1
- 192.168.1.2
jdbc.userName = liuy
jdbc.password = 123456
org.springframework.boot.env.EnvironmentPostProcessor=com.ly.learnSpringboot.MyEnvironmentPostProcessor
test:
ip: 192.168.0.104
local:
ip: 192.168.1.1
port: 8080
name: spring boot
app:
name: my ${name}
tomcat:
port: 9001
spring:
profiles:
active: test