有时候,我们需要自定义一些信息来实现我们的信息加载,下面通过两个实际案例来讲解一下如何自定义加载信息:
案例1–自定义数据源信息
第一步:在yml或者资源属性文件中定义数据源信息:
ms:
db:
driverClassName: oracle.jdbc.driver.OracleDriver
#url
url: jdbc:oracle:thin:@localhost:1521:orcl
#用户名
username: test
#用户密码
password: a
maxActive: 500
第二步:编写工具类
package com.yzh.maven.config;
import com.mchange.v2.c3p0.ComboPooledDataSource;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.core.env.Environment;
import java.beans.PropertyVetoException;
/**
* Created by Administrator on 2018/9/14 0014.
*/
@Configuration
public class DBConfig {
@Autowired
private Environment env;
@Bean(name="dataSource")
public ComboPooledDataSource dataSource() throws PropertyVetoException {
ComboPooledDataSource dataSource = new ComboPooledDataSource();
dataSource.setDriverClass(env.getProperty("ms.db.driverClassName"));
//通过Environment实例直接获取yml文件中的信息ms.db.url
dataSource.setJdbcUrl(env.getProperty("ms.db.url"));
dataSource.setUser(env.getProperty("ms.db.username"));
dataSource.setPassword(env.getProperty("ms.db.password"));
dataSource.setMaxPoolSize(20);
dataSource.setMinPoolSize(5);
dataSource.setInitialPoolSize(10);
dataSource.setMaxIdleTime(300);
dataSource.setAcquireIncrement(5);
dataSource.setIdleConnectionTestPeriod(60);
return dataSource;
}
}
案例2–自定义端口信息和自动建表、显示SQL属性信息
有的时候,程序在编译器环境中可以稳定运行,但是打成jar包后会出现端口不一致、无法自动建表和显示SQL属性信息,那么这时候,我们就需要自定义这些信息,以保证程序在加载时保持开发环境和生产环境的统一:
第一步:在yml或者资源属性文件中定义数据源信息:
#配置端口
server_port: 8988
#自动建表采用update的方式
auto_create:
table: update
#是否显示sql
my:
show_sql: true
第二步:
建立信息环境处理工具类
package com.yzh.maven.entity;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.boot.context.embedded.ConfigurableEmbeddedServletContainer;
import org.springframework.boot.context.embedded.EmbeddedServletContainerCustomizer;
import org.springframework.boot.web.support.SpringBootServletInitializer;
import org.springframework.stereotype.Repository;
/**
* Created by Administrator on 2018/9/14 0014.
*/
@Repository
public class ApplicationProperties extends SpringBootServletInitializer implements EmbeddedServletContainerCustomizer {
@Value("${auto_create.table}")
private String isCreateTable;
@Value("${my.show_sql}")
private boolean isShowSql;
@Value("${server_port}")
private int server_port;
public String getIsCreateTable() {
return isCreateTable;
}
public void setIsCreateTable(String isCreateTable) {
this.isCreateTable = isCreateTable;
}
public boolean isShowSql() {
return isShowSql;
}
public void setShowSql(boolean showSql) {
isShowSql = showSql;
}
public ApplicationProperties() {
}
public int getServer_port() {
return server_port;
}
public void setServer_port(int server_port) {
this.server_port = server_port;
}
//设置端口(服务器启动时调用)
@Override
public void customize(ConfigurableEmbeddedServletContainer configurableEmbeddedServletContainer) {
configurableEmbeddedServletContainer.setPort(this.server_port);
}
}
注意:因为这个类最终是要使用@Autowired注解来获取实例的,因此我们需要在其上方添加@Repository注解;我们使用 @Value(“${xxx.yyy}”)的格式获取yml或资源文件中的信息;由于端口需要在启动服务器时设置好,因此我们需要继承SpringBootServletInitializer并实现 EmbeddedServletContainerCustomizer接口的customize()定制方法,通过ConfigurableEmbeddedServletContainer类的setPort()方法来设置端口。
第三步:
使用 @Autowired注解可以获取ApplicationProperties的一个实例,然后通过getXXX()方法来获取值。