Spring Boot入门教程-数据源外部配置

来源:互联网 发布:手机淘宝怎么上传宝贝 编辑:程序博客网 时间:2024/05/29 19:45

在实际项目中,测试环境与线上环境是分开的,数据库也是分开的,前边关于mybatis集成时,数据源是在application.properties中配置,这样如果从测试环境转到线上环境就不得不每次都去修改,稍有不慎就容易出错,那样后果就惨了。所以我们就要考虑吧数据源的配置挪到外边,从项目中获取相关配置,来自定义数据源。

1.首先在磁盘上创建件配置文件 datasource-config.xml,账号密码等数据库连接信息自行修改

<?xml version="1.0" encoding="UTF-8"?><config>        <!-- 数据源配置 -->        <data-source> <db-host>localhost</db-host>                <db-port>3306</db-port>                <username>username</username>                <password>password</password>                <db-name>db-name</db-name>-->                <driver-class-name>com.mysql.jdbc.Driver</driver-class-name>                <db-protocol>jdbc:mysql:</db-protocol>                <db-param>?useUnicode=true&characterEncoding=utf-8&zeroDateTimeBehavior=convertToNull&transformedBitIsBoolean=true</db-param>                <max-active>50</max-active>                <max-idle>30</max-idle>                <max-wait>100</max-wait>                <initial-size>5</initial-size>                <pool-prepared-statements>true</pool-prepared-statements>                <validation-query>select 1 from dual</validation-query>                <remove-abandoned>true</remove-abandoned>                <remove-abandoned-timeout>150</remove-abandoned-timeout>                <test-while-idle>true</test-while-idle>                <time-between-eviction-runs-millis>3000</time-between-eviction-runs-millis>                <min-evictable-idle-time-millis>5200</min-evictable-idle-time-millis>                <default-autocommit>true</default-autocommit>        </data-source></collectmail-config>

2.在resource下创建文件夹config,并创建config.propertie文件,添加

config.location=D\:\\etc\\tomcm\\datasource-config.xml #配置文件路径 只是我的,用的话自行修改

3.添加之前写好的配置文件工具类
/** * 配置工具类   获取配置信息,可以更换配置文件的路径名字,来获取不同文件内的内容 * */public class PropertiesUtil {public static Properties loadProperties(String properties) throws Exception {Properties prop = new Properties();InputStream propertiesStream = PropertiesUtil.class.getClassLoader().getResourceAsStream(properties);try {prop.load(propertiesStream);} finally {propertiesStream.close();}return prop;}public static <T> T getPara(Properties properties, Class<T> type, String key) {String value = properties.getProperty(key);return parseValue(type, value);}@SuppressWarnings("unchecked")public static <T> T parseValue(Class<T> type, String value) {if (Integer.class == type || int.class == type) {return (T) Integer.valueOf(value);}if (Double.class == type || double.class == type) {return (T) Double.valueOf(value);}if (Long.class == type || long.class == type) {return (T) Long.valueOf(value);}if (Boolean.class == type || boolean.class == type) {return (T) Boolean.valueOf(value);}return (T) value;}//public static void main(String[] args) throws Exception {//Properties properties = loadProperties("config/config.properties");//System.out.println(getPara(properties, boolean.class, "si.printsql"));//false//System.out.println(getPara(properties, String.class, "si.page.pagersize"));//10//}}
/** * 配置工具类   获取配置信息,来获取指定文件内的内容 * */public class ConfigUtil {private static Log log = LogFactory.getLog(ConfigUtil.class);//需要解析的properties文件private static String propertiesUrl = "config/config.properties";private static Properties prop = null;private static Configuration config = null;static{init();}private static void init(){prop = new Properties();InputStream in = null;try {in = PropertiesUtil.class.getClassLoader().getResourceAsStream(propertiesUrl);prop.load(in);System.out.println(prop.getProperty("config.location"));config = new XMLConfiguration(prop.getProperty("config.location"));} catch (IOException e) {log.error(e.getMessage(),e);} catch (ConfigurationException e) {e.printStackTrace();}  finally{if(in!=null){try {in.close();} catch (IOException e) {log.error(e.getMessage(),e);in = null;}}}}/** * 获得String类型的属性值 *  * @param key * @return */public static String getString(String key){return config==null?null:config.getString(key);}/** * 获得int类型的属性值 *  * @param key * @return */public static int getInt(String key){return config==null?null:config.getInt(key);}/** * 获得boolean类型的属性值 *  * @param key * @return */public static boolean getBoolean(String key){return config==null?null:config.getBoolean(key);}////public static void main(String[] args) throws Exception {//System.out.println(ConfigUtil.getString("data-source.db-host"));//}}

pom.xml中需要加入依赖

<dependency><groupId>commons-dbcp</groupId><artifactId>commons-dbcp</artifactId><version>1.4</version></dependency><dependency><groupId>commons-configuration</groupId><artifactId>commons-configuration</artifactId><version>1.2</version></dependency>


4.自定义数据源

@Configuration @Componentpublic class DataSource extends org.apache.commons.dbcp.BasicDataSource {    public DataSource() {        super();        this.setDriverClassName(ConfigUtil                .getString("data-source.driver-class-name"));        this.setUrl(ConfigUtil.getString("data-source.db-protocol") + "//"                + ConfigUtil.getString("data-source.db-host") + ":"                + ConfigUtil.getString("data-source.db-port") + "/"                + ConfigUtil.getString("data-source.db-name")                + ConfigUtil.getString("data-source.db-param"));        this.setUsername(ConfigUtil.getString("data-source.username"));        this.setPassword(ConfigUtil.getString("data-source.password"));        this.setMaxActive(ConfigUtil.getInt("data-source.max-active"));        this.setMaxIdle(ConfigUtil.getInt("data-source.max-idle"));        this.setMaxWait(ConfigUtil.getInt("data-source.max-wait"));        this.setInitialSize(ConfigUtil.getInt("data-source.initial-size"));        this.setPoolPreparedStatements(ConfigUtil.getBoolean("data-source.pool-prepared-statements"));        this.setValidationQuery(ConfigUtil.getString("data-source.validation-query"));        this.setRemoveAbandoned(ConfigUtil.getBoolean("data-source.remove-abandoned"));        this.setRemoveAbandonedTimeout(ConfigUtil.getInt("data-source.remove-abandoned-timeout"));        this.setTestWhileIdle(ConfigUtil.getBoolean("data-source.test-while-idle"));        this.setTimeBetweenEvictionRunsMillis(ConfigUtil.getInt("data-source.time-between-eviction-runs-millis"));        this.setMinEvictableIdleTimeMillis(ConfigUtil.getInt("data-source.min-evictable-idle-time-millis"));        this.setDefaultAutoCommit(ConfigUtil.getBoolean("data-source.default-autocommit"));    }}
5.将 application.properties中原来的数据源去掉,添加
spring.datasource.type=com.example.demo.datasource.DataSource #自定义数据源位置 


6.启动项目,请求 之前写好的接口 http://localhost:8080/getPage

 @RequestMapping("getPage")    @ResponseBody    public List<User> getByPage() {        PageHelper.startPage(1, 3);//页数 每页数据数        return userService.getByPage();    }

数据获取成功


原创粉丝点击