spring-boot支持双数据源mysql+mongo
2016-07-24 01:10
701 查看
这里,首先想说的是,现在的web应用,处理的数据对象,有结构化的,也有非结构化的。同时存在。但是在spring-boot操作数据库的时候,若是在properties文件中配置数据源的信息,通过默认配置加载数据源的话,往往只会启动一个。
我出于想弄清如何配置数据源的目的,在这里demo一个配置两个数据源的例子。分别是mysql和mongo。mysql的持久化采用的是mybatis。
mongo的操作比较简单,直接贴上配置数据库的代码:
View Code
方便说明问题,将MysqlUser也附上代码:
下面看看,测试程序吧,我是在main函数里面写的,如下:
最后附上我的maven项目的pom文件:
还是相对比较简单的配置和操作。对于这个demo的例子程序,可以在GitHub https://github.com/shihuc/dbconn上下载。
http://www.cnblogs.com/shihuc/p/5169418.html
我出于想弄清如何配置数据源的目的,在这里demo一个配置两个数据源的例子。分别是mysql和mongo。mysql的持久化采用的是mybatis。
mongo的操作比较简单,直接贴上配置数据库的代码:
1 . ____ _ __ _ _ 2 /\\ / ___'_ __ _ _(_)_ __ __ _ \ \ \ \ 3 ( ( )\___ | '_ | '_| | '_ \/ _` | \ \ \ \ 4 \\/ ___)| |_)| | | | | || (_| | ) ) ) ) 5 ' |____| .__|_| |_|_| |_\__, | / / / / 6 =========|_|==============|___/=/_/_/_/ 7 :: Spring Boot :: (v1.2.7.RELEASE) 8 9 2016-01-29 15:01:07.930 INFO 30880 --- [ main] com.shihuc.dbconn.DbConnApp : Starting DbConnApp on CloudGame with PID 30880 (/home/webWps/dbconn/target/classes started by root in /home/webWps/dbconn) 10 2016-01-29 15:01:07.997 INFO 30880 --- [ main] s.c.a.AnnotationConfigApplicationContext : Refreshing org.springframework.context.annotation.AnnotationConfigApplicationContext@a85aa40: startup date [Fri Jan 29 15:01:07 CST 2016]; root of context hierarchy 11 2016-01-29 15:01:09.887 INFO 30880 --- [ main] trationDelegate$BeanPostProcessorChecker : Bean 'mysqlDataSourceConfig' of type [class com.shihuc.dbconn.sourceconfig.mysql.MysqlDataSourceConfig$$EnhancerBySpringCGLIB$$63c6820a] is not eligible for getting processed by all BeanPostProcessors (for example: not eligible for auto-proxying) 12 2016-01-29 15:01:09.915 INFO 30880 --- [ main] o.s.j.d.DriverManagerDataSource : Loaded JDBC driver: com.mysql.jdbc.Driver 13 2016-01-29 15:01:09.923 INFO 30880 --- [ main] trationDelegate$BeanPostProcessorChecker : Bean 'mysqlds' of type [class org.springframework.jdbc.datasource.DriverManagerDataSource] is not eligible for getting processed by all BeanPostProcessors (for example: not eligible for auto-proxying) 14 2016-01-29 15:01:09.926 INFO 30880 --- [ main] trationDelegate$BeanPostProcessorChecker : Bean 'mysqlMybatisConfig' of type [class com.shihuc.dbconn.sourceconfig.mysql.MysqlMybatisConfig$$EnhancerBySpringCGLIB$$bbfde9e4] is not eligible for getting processed by all BeanPostProcessors (for example: not eligible for auto-proxying) 15 2016-01-29 15:01:09.991 INFO 30880 --- [ main] trationDelegate$BeanPostProcessorChecker : Bean 'sqlSessionFactoryBean' of type [class org.apache.ibatis.session.defaults.DefaultSqlSessionFactory] is not eligible for getting processed by all BeanPostProcessors (for example: not eligible for auto-proxying) 16 2016-01-29 15:01:10.040 INFO 30880 --- [ main] trationDelegate$BeanPostProcessorChecker : Bean 'IMysqlUser' of type [class org.mybatis.spring.mapper.MapperFactoryBean] is not eligible for getting processed by all BeanPostProcessors (for example: not eligible for auto-proxying) 17 2016-01-29 15:01:10.876 INFO 30880 --- [ main] o.s.j.e.a.AnnotationMBeanExporter : Registering beans for JMX exposure on startup 18 2016-01-29 15:01:10.888 INFO 30880 --- [ main] com.shihuc.dbconn.DbConnApp : Started DbConnApp in 3.274 seconds (JVM running for 3.561) 19 Exception in thread "main" org.mybatis.spring.MyBatisSystemException: nested exception is org.apache.ibatis.reflection.ReflectionException: Error instantiating class com.shihuc.dbconn.pojo.mysql.MysqlUser with invalid types () or values (). Cause: java.lang.NoSuchMethodException: com.shihuc.dbconn.pojo.mysql.MysqlUser.<init>() 20 at org.mybatis.spring.MyBatisExceptionTranslator.translateExceptionIfPossible(MyBatisExceptionTranslator.java:75) 21 at org.mybatis.spring.SqlSessionTemplate$SqlSessionInterceptor.invoke(SqlSessionTemplate.java:371) 22 at com.sun.proxy.$Proxy26.selectOne(Unknown Source) 23 at org.mybatis.spring.SqlSessionTemplate.selectOne(SqlSessionTemplate.java:163) 24 at org.apache.ibatis.binding.MapperMethod.execute(MapperMethod.java:63) 25 at org.apache.ibatis.binding.MapperProxy.invoke(MapperProxy.java:43) 26 at com.sun.proxy.$Proxy34.getUser(Unknown Source) 27 at com.shihuc.dbconn.service.mysql.MysqlUserService.getUser(MysqlUserService.java:20) 28 at com.shihuc.dbconn.DbConnApp.main(DbConnApp.java:34) 29 Caused by: org.apache.ibatis.reflection.ReflectionException: Error instantiating class com.shihuc.dbconn.pojo.mysql.MysqlUser with invalid types () or values (). Cause: java.lang.NoSuchMethodException: com.shihuc.dbconn.pojo.mysql.MysqlUser.<init>() 30 at org.apache.ibatis.reflection.factory.DefaultObjectFactory.instantiateClass(DefaultObjectFactory.java:83) 31 at org.apache.ibatis.reflection.factory.DefaultObjectFactory.create(DefaultObjectFactory.java:45) 32 at org.apache.ibatis.reflection.factory.DefaultObjectFactory.create(DefaultObjectFactory.java:38) 33 at org.apache.ibatis.executor.resultset.DefaultResultSetHandler.createResultObject(DefaultResultSetHandler.java:530) 34 at org.apache.ibatis.executor.resultset.DefaultResultSetHandler.createResultObject(DefaultResultSetHandler.java:509) 35 at org.apache.ibatis.executor.resultset.DefaultResultSetHandler.getRowValue(DefaultResultSetHandler.java:329) 36 at org.apache.ibatis.executor.resultset.DefaultResultSetHandler.handleRowValuesForSimpleResultMap(DefaultResultSetHandler.java:289) 37 at org.apache.ibatis.executor.resultset.DefaultResultSetHandler.handleRowValues(DefaultResultSetHandler.java:264) 38 at org.apache.ibatis.executor.resultset.DefaultResultSetHandler.handleResultSet(DefaultResultSetHandler.java:234) 39 at org.apache.ibatis.executor.resultset.DefaultResultSetHandler.handleResultSets(DefaultResultSetHandler.java:152) 40 at org.apache.ibatis.executor.statement.PreparedStatementHandler.query(PreparedStatementHandler.java:57) 41 at org.apache.ibatis.executor.statement.RoutingStatementHandler.query(RoutingStatementHandler.java:70) 42 at org.apache.ibatis.executor.SimpleExecutor.doQuery(SimpleExecutor.java:57) 43 at org.apache.ibatis.executor.BaseExecutor.queryFromDatabase(BaseExecutor.java:259) 44 at org.apache.ibatis.executor.BaseExecutor.query(BaseExecutor.java:132) 45 at org.apache.ibatis.executor.CachingExecutor.query(CachingExecutor.java:105) 46 at org.apache.ibatis.executor.CachingExecutor.query(CachingExecutor.java:81) 47 at org.apache.ibatis.session.defaults.DefaultSqlSession.selectList(DefaultSqlSession.java:104) 48 at org.apache.ibatis.session.defaults.DefaultSqlSession.selectList(DefaultSqlSession.java:98) 49 at org.apache.ibatis.session.defaults.DefaultSqlSession.selectOne(DefaultSqlSession.java:62) 50 at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) 51 at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:57) 52 at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) 53 at java.lang.reflect.Method.invoke(Method.java:606) 54 at org.mybatis.spring.SqlSessionTemplate$SqlSessionInterceptor.invoke(SqlSessionTemplate.java:358) 55 ... 7 more 56 Caused by: java.lang.NoSuchMethodException: com.shihuc.dbconn.pojo.mysql.MysqlUser.<init>() 57 at java.lang.Class.getConstructor0(Class.java:2892) 58 at java.lang.Class.getDeclaredConstructor(Class.java:2058) 59 at org.apache.ibatis.reflection.factory.DefaultObjectFactory.instantiateClass(DefaultObjectFactory.java:57) 60 ... 31 more 61 2016-01-29 15:01:11.139 INFO 30880 --- [ Thread-1] s.c.a.AnnotationConfigApplicationContext : Closing org.springframework.context.annotation.AnnotationConfigApplicationContext@a85aa40: startup date [Fri Jan 29 15:01:07 CST 2016]; root of context hierarchy 62 2016-01-29 15:01:11.142 INFO 30880 --- [ Thread-1] o.s.j.e.a.AnnotationMBeanExporter : Unregistering JMX-exposed beans on shutdown
View Code
方便说明问题,将MysqlUser也附上代码:
1 package com.shihuc.dbconn.pojo.mysql; 2 3 import com.shihuc.dbconn.pojo.User; 4 5 public class MysqlUser extends User{ 6 7 private static final long serialVersionUID = -6412107575129572581L; 8 9 //这个id是数据库中通过设置auto_increment得到的主键值 10 private int id; 11 12 public int getId() { 13 return id; 14 } 15 16 public void setId(int id) { 17 this.id = id; 18 } 19 20 public MysqlUser(){ 21 22 } 23 24 public MysqlUser(String username, String job, int age, String hometown){ 25 this.username = username; 26 this.job = job; 27 this.age = age; 28 this.hometown = hometown; 29 } 30 31 }
下面看看,测试程序吧,我是在main函数里面写的,如下:
1 package com.shihuc.dbconn; 2 3 import org.springframework.boot.SpringApplication; 4 import org.springframework.boot.autoconfigure.SpringBootApplication; 5 import org.springframework.context.ApplicationContext; 6 import org.springframework.context.annotation.PropertySource; 7 8 import com.shihuc.dbconn.pojo.mongo.MongoUser; 9 import com.shihuc.dbconn.pojo.mysql.MysqlUser; 10 import com.shihuc.dbconn.service.mongo.MongoUserService; 11 import com.shihuc.dbconn.service.mysql.MysqlUserService; 12 13 /** 14 * 15 * @author shihuc 16 * @date Jan 29, 2016 17 * 18 */ 19 @SpringBootApplication 20 @PropertySource(value = "dbconn.properties") 21 public class DbConnApp 22 { 23 24 public static void main(String[] args) throws Throwable { 25 26 SpringApplication app = new SpringApplication(DbConnApp.class); 27 28 ApplicationContext ctx = app.run(args); 29 30 MysqlUserService mysqlUserService = (MysqlUserService)ctx.getBean("mysqlUserService"); 31 // MysqlUser su = new MysqlUser("shihuc", "SW", 30 , "wuhan"); 32 // mysqlUserService.addUser(su); 33 MysqlUser ue = mysqlUserService.getUser(1); 34 System.out.println("Mysql User: " + ue); 35 36 MongoUserService mongoUserService = (MongoUserService)ctx.getBean("mongoUserService"); 37 // MongoUser mu = new MongoUser("shihuc", "SW", 30 , "wuhan"); 38 // mongoUserService.addUser(mu); 39 MongoUser um = mongoUserService.getUser("shihuc"); 40 System.out.println("Mongo User: " + um); 41 } 42 }
最后附上我的maven项目的pom文件:
1 <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 2 xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"> 3 <modelVersion>4.0.0</modelVersion> 4 5 <groupId>com.shihuc</groupId> 6 <artifactId>dbconn</artifactId> 7 <version>0.0.1-SNAPSHOT</version> 8 <packaging>jar</packaging> 9 10 <name>dbconn</name> 11 <url>http://maven.apache.org</url> 12 13 <parent> 14 <groupId>org.springframework.boot</groupId> 15 <artifactId>spring-boot-starter-parent</artifactId> 16 <version>1.2.7.RELEASE</version> 17 </parent> 18 19 <properties> 20 <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding> 21 </properties> 22 23 <dependencies> 24 <dependency> 25 <groupId>org.springframework.boot</groupId> 26 <artifactId>spring-boot-starter-jdbc</artifactId> 27 </dependency> 28 <dependency> 29 <groupId>mysql</groupId> 30 <artifactId>mysql-connector-java</artifactId> 31 </dependency> 32 <dependency> 33 <groupId>org.mybatis</groupId> 34 <artifactId>mybatis</artifactId> 35 <version>3.2.3</version> 36 </dependency> 37 <dependency> 38 <groupId>org.mybatis</groupId> 39 <artifactId>mybatis-spring</artifactId> 40 <version>1.2.2</version> 41 </dependency> 42 <dependency> 43 <groupId>org.springframework.boot</groupId> 44 <artifactId>spring-boot-starter-data-mongodb</artifactId> 45 </dependency> 46 </dependencies> 47 48 <build> 49 <plugins> 50 <plugin> 51 <groupId>org.springframework.boot</groupId> 52 <artifactId>spring-boot-maven-plugin</artifactId> 53 </plugin> 54 </plugins> 55 </build> 56 </project>
还是相对比较简单的配置和操作。对于这个demo的例子程序,可以在GitHub https://github.com/shihuc/dbconn上下载。
http://www.cnblogs.com/shihuc/p/5169418.html
相关文章推荐
- Spring boot Mybatis
- 一个多层级节点用户树的设计构思
- Java挑战高并发(2):线程中断
- synchronized关键字
- SpringMVC Interceptor
- 基于Spring Boot和Spring Cloud实现微服务架构学习(四)-Spring Cloud总结
- Java挑战并发(1):可重入内置锁
- Java3D导入obj和3ds模型整理
- spring 2.5 在 jre 1.8下的error
- 08_一个java.lang.NullPointException报错
- java.security.AccessControlException: access denied
- JAVA中单例与多例的实现
- Java源码-字体的定义与修改
- 【Leetcode】213. House Robber II 【动态规划】
- [置顶] JavaSE复习总结(一)
- Java的字体类详解(Font)-摘自Java API文档
- JavaWeb文件上传下载
- Netbeans安装教程
- java版 贪吃蛇小游戏 完整源码 (测试100%无误
- Spring Boot MyBatis 连接数据库