Spring Boot入门教程-数据源外部配置
2017-08-30 15:15
399 查看
在实际项目中,测试环境与线上环境是分开的,数据库也是分开的,前边关于mybatis集成时,数据源是在application.properties中配置,这样如果从测试环境转到线上环境就不得不每次都去修改,稍有不慎就容易出错,那样后果就惨了。所以我们就要考虑吧数据源的配置挪到外边,从项目中获取相关配置,来自定义数据源。
1.首先在磁盘上创建件配置文件 datasource-config.xml,账号密码等数据库连接信息自行修改
2.在resource下创建文件夹config,并创建config.propertie文件,添加
3.添加之前写好的配置文件工具类
pom.xml中需要加入依赖
4.自定义数据源
6.启动项目,请求 之前写好的接口 http://localhost:8080/getPage
数据获取成功
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 @Component public 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(); }
数据获取成功
相关文章推荐
- Spring Boot系列教程四:配置文件详解properties
- 入门-JAVA运行环境变量的配置图文教程
- Spring Security 3.x完整入门配置教程及其代码下载
- 翻译 Cesium入门教程(一)------环境配置 Hello World
- 解决spring boot 1.5.4 配置多数据源的问题
- Bullet学习教程 入门 配置方法及HelloWord示例
- 【OpenCV入门教程之一】 安装OpenCV:OpenCV 3.0、OpenCV 2.4.8、OpenCV 2.4.9 +VS 开发环境配置
- 【OpenCV入门教程之一】 安装OpenCV:OpenCV 3.0、OpenCV 2.4.8、OpenCV 2.4.9 +VS 开发环境配置
- 【OpenCV入门教程之一】 安装OpenCV:OpenCV 3.0、OpenCV 2.4.8、OpenCV 2.4.9 +VS 开发环境配置
- duilib入门简明教程 -- VS环境配置(2) (转)
- Spring Boot 支持多种外部配置方式
- 04.风哥Oracle数据库实战入门-Oracle安装配置视频教程
- java+jsp微信开发入门教程 jssdk,通过config接口注入权限验证配置,微信开发教程
- struts2+spring+mybatis入门教程六之配置json
- GitHub入门教程(二)- 使用前的配置
- 【OpenCV入门教程之一】 安装OpenCV:OpenCV 3.0、OpenCV 2.4.8、OpenCV 2.4.9 +VS 开发环境配置
- Alberl 2013 duilib入门简明教程 -- VS环境配置(2)
- ejb 3 开发快速入门 3 配置jboss数据源
- Tomcat的安装配置与JavaWeb入门教程
- PyCharm 2017 官网 下载 安装 设置 配置 (主题 字体 字号) 使用 入门 教程