zoukankan      html  css  js  c++  java
  • spring 中连接多个数据源

    http://www.ityouknow.com/springboot/2016/08/20/springboot(%E4%BA%94)-spring-data-jpa%E7%9A%84%E4%BD%BF%E7%94%A8.html

    http://www.cnblogs.com/shihuc/p/5169418.html 这个不错

    https://medium.com/@joeclever/using-multiple-datasources-with-spring-boot-and-spring-data-6430b00c02e7

    https://docs.spring.io/spring-boot/docs/current/reference/html/howto-data-access.html

    https://stackoverflow.com/questions/44507705/spring-boot-connect-mysql-and-mongodb

    同源数据库的多源支持

    日常项目中因为使用的分布式开发模式,不同的服务有不同的数据源,常常需要在一个项目中使用多个数据源,因此需要配置sping data jpa对多数据源的使用,一般分一下为三步:

    • 1 配置多数据源
    • 2 不同源的实体类放入不同包路径
    • 3 声明不同的包路径下使用不同的数据源、事务支持

    这里有一篇文章写的很清楚:Spring Boot多数据源配置与使用

    异构数据库多源支持

    比如我们的项目中,即需要对mysql的支持,也需要对mongodb的查询等。

    实体类声明@Entity 关系型数据库支持类型、声明@Document 为mongodb支持类型,不同的数据源使用不同的实体就可以了

    interface PersonRepository extends Repository<Person, Long> {
     }
    
    @Entity
    public class Person {
      }
    
    interface UserRepository extends Repository<User, Long> {
     }
    
    @Document
    public class User {
      }
    

    但是,如果User用户既使用mysql也使用mongodb呢,也可以做混合使用

    interface JpaPersonRepository extends Repository<Person, Long> {
     }
    
    interface MongoDBPersonRepository extends Repository<Person, Long> {
     }
    
    @Entity
    @Document
    public class Person {
      }
    

    也可以通过对不同的包路径进行声明,比如A包路径下使用mysql,B包路径下使用mongoDB

    @EnableJpaRepositories(basePackages = "com.neo.repositories.jpa")
    @EnableMongoRepositories(basePackages = "com.neo.repositories.mongo")
    interface Configuration { }
    

     http://www.jianshu.com/p/34730e595a8c

    http://www.cnblogs.com/liujiduo/p/5004691.html

    ___________________________________

    http://limingnihao.iteye.com/blog/1940446

     MongoDB整合Spring

    (黎明你好原创作品,转载请注明)

    4.1 创建maven项目

    4.1.1 repositories

    创建maven项目,其中repositories使用spring的maven库:

    Java代码  收藏代码
    1. <repositories>  
    2.     <repository>  
    3.         <id>central</id>  
    4.         <name>Maven Central</name>  
    5.         <url>http://repo1.maven.org/maven2/</url>  
    6.     </repository>  
    7.     <repository>  
    8.         <id>spring-release</id>  
    9.         <name>Spring Maven Release Repository</name>  
    10.         <url>http://repo.springsource.org/libs-release</url>  
    11.     </repository>  
    12.     <repository>  
    13.         <id>atlassian-m2-repository</id>  
    14.         <url>https://m2proxy.atlassian.com/repository/public</url>  
    15.     </repository>  
    16. </repositories>  

    4.1.2 Dependencies

    使用到的jar包:

    Java代码  收藏代码
    1. <dependencies>  
    2.     <dependency>  
    3.         <groupId>javax.servlet</groupId>  
    4.         <artifactId>servlet-api</artifactId>  
    5.         <version>2.5</version>  
    6.         <type>jar</type>  
    7.         <scope>provided</scope>  
    8.     </dependency>  
    9.     <dependency>  
    10.         <groupId>org.slf4j</groupId>  
    11.         <artifactId>slf4j-api</artifactId>  
    12.         <version>1.6.1</version>  
    13.         <type>jar</type>  
    14.         <scope>compile</scope>  
    15.     </dependency>  
    16.     <dependency>  
    17.         <groupId>org.slf4j</groupId>  
    18.         <artifactId>slf4j-log4j12</artifactId>  
    19.         <version>1.7.5</version>  
    20.         <type>jar</type>  
    21.         <scope>runtime</scope>  
    22.     </dependency>  
    23.     <dependency>  
    24.         <groupId>org.mongodb</groupId>  
    25.         <artifactId>mongo-java-driver</artifactId>  
    26.         <version>2.10.1</version>  
    27.         <type>jar</type>  
    28.         <scope>compile</scope>  
    29.     </dependency>  
    30.     <dependency>  
    31.         <groupId>org.springframework.data</groupId>  
    32.         <artifactId>spring-data-mongodb</artifactId>  
    33.         <version>1.2.1.RELEASE</version>  
    34.         <type>jar</type>  
    35.         <scope>compile</scope>  
    36.     </dependency>  
    37.     <dependency>  
    38.         <groupId>org.springframework.data</groupId>  
    39.         <artifactId>spring-data-mongodb-cross-store</artifactId>  
    40.         <version>1.2.1.RELEASE</version>  
    41.         <type>jar</type>  
    42.         <scope>compile</scope>  
    43.     </dependency>  
    44.     <dependency>  
    45.         <groupId>org.springframework.data</groupId>  
    46.         <artifactId>spring-data-mongodb-log4j</artifactId>  
    47.         <version>1.2.1.RELEASE</version>  
    48.         <type>jar</type>  
    49.         <scope>compile</scope>  
    50.     </dependency>  
    51. </dependencies>  

    4.2 添加spring配置文件

    spring的配置文件applicationContext.xml

    Java代码  收藏代码
    1. <?xml version="1.0" encoding="UTF-8"?>  
    2. <beans xmlns="http://www.springframework.org/schema/beans"  
    3.     xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"   
    4.     xmlns:context="http://www.springframework.org/schema/context"  
    5.     xmlns:mongo="http://www.springframework.org/schema/data/mongo"  
    6.     xsi:schemaLocation="http://www.springframework.org/schema/beans  
    7.         http://www.springframework.org/schema/beans/spring-beans-3.0.xsd  
    8.         http://www.springframework.org/schema/data/mongo       
    9.         http://www.springframework.org/schema/data/mongo/spring-mongo-1.0.xsd   
    10.         http://www.springframework.org/schema/context  
    11.         http://www.springframework.org/schema/context/spring-context-3.0.xsd">  
    12.   
    13.     <context:component-scan base-package="liming.mongodb.example" />  
    14.   
    15.     <mongo:mongo host="127.0.0.1" port="27017" />  
    16.   
    17.     <!-- mongo的工厂,通过它来取得mongo实例,dbname为mongodb的数据库名,没有的话会自动创建 -->  
    18.     <mongo:db-factory dbname="student" mongo-ref="mongo" />  
    19.   
    20.     <!-- mongodb的主要操作对象,所有对mongodb的增删改查的操作都是通过它完成 -->  
    21.     <bean id="mongoTemplate" class="org.springframework.data.mongodb.core.MongoTemplate">  
    22.         <constructor-arg name="mongoDbFactory" ref="mongoDbFactory" />  
    23.     </bean>  
    24.   
    25.     <!-- 映射转换器,扫描back-package目录下的文件,根据注释,把它们作为mongodb的一个collection的映射 -->  
    26.     <mongo:mapping-converter base-package="climing.mongodb.example.data.model" />  
    27.   
    28.     <!-- mongodb bean的仓库目录,会自动扫描扩展了MongoRepository接口的接口进行注入 -->  
    29.     <mongo:repositories base-package="liming.mongodb.example.data.impl" />  
    30.   
    31.     <context:annotation-config />  
    32.   
    33. </beans>  

    4.3 增删改查

    Userl实现的增删改查:

    4.3.1UserEntity

    Java代码  收藏代码
    1. package liming.mongodb.example.data.model;  
    2.   
    3. import java.util.Date;  
    4.   
    5. import org.springframework.data.annotation.Id;  
    6. import org.springframework.data.mongodb.core.mapping.Document;  
    7.   
    8. @Document(collection = "user")  
    9. public class UserEntity {  
    10.   
    11.     @Id  
    12.     private String id;  
    13.     private NameEntity name;  
    14.     private int age;  
    15.     private int works;  
    16.     private Date birth;  
    17.     private String password;  
    18.     private String regionName;  
    19.     private String[] special;  
    20.   
    21.     public String getId() {  
    22.         return id;  
    23.     }  
    24.   
    25.     public void setId(String id) {  
    26.         this.id = id;  
    27.     }  
    28.   
    29.     public NameEntity getName() {  
    30.         return name;  
    31.     }  
    32.   
    33.     public void setName(NameEntity name) {  
    34.         this.name = name;  
    35.     }  
    36.   
    37.     public int getAge() {  
    38.         return age;  
    39.     }  
    40.   
    41.     public void setAge(int age) {  
    42.         this.age = age;  
    43.     }  
    44.   
    45.     public int getWorks() {  
    46.         return works;  
    47.     }  
    48.   
    49.     public void setWorks(int works) {  
    50.         this.works = works;  
    51.     }  
    52.   
    53.     public Date getBirth() {  
    54.         return birth;  
    55.     }  
    56.   
    57.     public void setBirth(Date birth) {  
    58.         this.birth = birth;  
    59.     }  
    60.   
    61.     public String getPassword() {  
    62.         return password;  
    63.     }  
    64.   
    65.     public void setPassword(String password) {  
    66.         this.password = password;  
    67.     }  
    68.   
    69.     public String getRegionName() {  
    70.         return regionName;  
    71.     }  
    72.   
    73.     public void setRegionName(String regionName) {  
    74.         this.regionName = regionName;  
    75.     }  
    76.   
    77.     public String[] getSpecial() {  
    78.         return special;  
    79.     }  
    80.   
    81.     public void setSpecial(String[] special) {  
    82.         this.special = special;  
    83.     }  
    84.   
    85. }  

    4.3.2 NameEntity

    Java代码  收藏代码
    1. package liming.mongodb.example.data.model;  
    2.   
    3. public class NameEntity {  
    4.   
    5.     private String username;  
    6.   
    7.     private String nickname;  
    8.   
    9.     public String getUsername() {  
    10.         return username;  
    11.     }  
    12.   
    13.     public void setUsername(String username) {  
    14.         this.username = username;  
    15.     }  
    16.   
    17.     public String getNickname() {  
    18.         return nickname;  
    19.     }  
    20.   
    21.     public void setNickname(String nickname) {  
    22.         this.nickname = nickname;  
    23.     }  
    24.   
    25. }  

    4.3.3 UserDao

    Java代码  收藏代码
    1. package liming.mongodb.example.data;  
    2.   
    3. import java.util.List;  
    4.   
    5. import liming.mongodb.example.data.model.UserEntity;  
    6.   
    7. import org.springframework.transaction.annotation.Transactional;  
    8.   
    9. @Transactional  
    10. public interface UserDao {  
    11.   
    12.     public abstract void _test();  
    13.   
    14.     public abstract void createCollection();  
    15.   
    16.     public abstract List<UserEntity> findList(int skip, int limit);  
    17.   
    18.     public abstract List<UserEntity> findListByAge(int age);  
    19.   
    20.     public abstract UserEntity findOne(String id);  
    21.   
    22.     public abstract UserEntity findOneByUsername(String username);  
    23.   
    24.     public abstract void insert(UserEntity entity);  
    25.   
    26.     public abstract void update(UserEntity entity);  
    27.   
    28. }  

    4.3.4 UserDaoImpl

    Java代码  收藏代码
    1. package liming.mongodb.example.data.impl;  
    2.   
    3. import java.util.List;  
    4. import java.util.Set;  
    5.   
    6. import liming.mongodb.example.data.UserDao;  
    7. import liming.mongodb.example.data.model.UserEntity;  
    8.   
    9. import org.slf4j.Logger;  
    10. import org.slf4j.LoggerFactory;  
    11. import org.springframework.beans.factory.annotation.Autowired;  
    12. import org.springframework.data.domain.Sort;  
    13. import org.springframework.data.domain.Sort.Direction;  
    14. import org.springframework.data.domain.Sort.Order;  
    15. import org.springframework.data.mongodb.core.MongoTemplate;  
    16. import org.springframework.data.mongodb.core.query.Criteria;  
    17. import org.springframework.data.mongodb.core.query.Query;  
    18. import org.springframework.data.mongodb.core.query.Update;  
    19. import org.springframework.stereotype.Repository;  
    20.   
    21. import com.mongodb.DB;  
    22.   
    23. @Repository  
    24. public class UserDaoImpl implements UserDao {  
    25.   
    26.     public static final Logger logger = LoggerFactory.getLogger(UserDaoImpl.class);  
    27.   
    28.     @Autowired  
    29.     private MongoTemplate mongoTemplate;  
    30.   
    31.     @Override  
    32.     public void _test() {  
    33.         Set<String> colls = this.mongoTemplate.getCollectionNames();  
    34.         for (String coll : colls) {  
    35.             logger.info("CollectionName=" + coll);  
    36.         }  
    37.         DB db = this.mongoTemplate.getDb();  
    38.         logger.info("db=" + db.toString());  
    39.     }  
    40.   
    41.     @Override  
    42.     public void createCollection() {  
    43.         if (!this.mongoTemplate.collectionExists(UserEntity.class)) {  
    44.             this.mongoTemplate.createCollection(UserEntity.class);  
    45.         }  
    46.     }  
    47.   
    48.     @Override  
    49.     public List<UserEntity> findList(int skip, int limit) {  
    50.         Query query = new Query();  
    51.         query.with(new Sort(new Order(Direction.ASC, "_id")));  
    52.         query.skip(skip).limit(limit);  
    53.         return this.mongoTemplate.find(query, UserEntity.class);  
    54.     }  
    55.   
    56.     @Override  
    57.     public List<UserEntity> findListByAge(int age) {  
    58.         Query query = new Query();  
    59.         query.addCriteria(new Criteria("age").is(age));  
    60.         return this.mongoTemplate.find(query, UserEntity.class);  
    61.     }  
    62.   
    63.     @Override  
    64.     public UserEntity findOne(String id) {  
    65.         Query query = new Query();  
    66.         query.addCriteria(new Criteria("_id").is(id));  
    67.         return this.mongoTemplate.findOne(query, UserEntity.class);  
    68.     }  
    69.   
    70.     @Override  
    71.     public UserEntity findOneByUsername(String username) {  
    72.         Query query = new Query();  
    73.         query.addCriteria(new Criteria("name.username").is(username));  
    74.         return this.mongoTemplate.findOne(query, UserEntity.class);  
    75.     }  
    76.   
    77.     @Override  
    78.     public void insert(UserEntity entity) {  
    79.         this.mongoTemplate.insert(entity);  
    80.   
    81.     }  
    82.   
    83.     @Override  
    84.     public void update(UserEntity entity) {  
    85.         Query query = new Query();  
    86.         query.addCriteria(new Criteria("_id").is(entity.getId()));  
    87.         Update update = new Update();  
    88.         update.set("age", entity.getAge());  
    89.         update.set("password", entity.getPassword());  
    90.         update.set("regionName", entity.getRegionName());  
    91.         update.set("special", entity.getSpecial());  
    92.         update.set("works", entity.getWorks());  
    93.         update.set("name", entity.getName());  
    94.         this.mongoTemplate.updateFirst(query, update, UserEntity.class);  
    95.   
    96.     }  
    97.   
    98. }  

    4.3.5 测试代码

    Java代码  收藏代码
    1. package liming.mongodb.example;  
    2.   
    3. import java.util.Arrays;  
    4. import java.util.Date;  
    5. import java.util.List;  
    6.   
    7. import liming.mongodb.example.data.UserDao;  
    8. import liming.mongodb.example.data.impl.UserDaoImpl;  
    9. import liming.mongodb.example.data.model.UserEntity;  
    10.   
    11. import org.springframework.context.ConfigurableApplicationContext;  
    12. import org.springframework.context.support.ClassPathXmlApplicationContext;  
    13.   
    14. public class ApplicationSpring {  
    15.   
    16.     public static void main(String[] args) {  
    17.   
    18.         System.out.println("Bootstrapping HelloMongo");  
    19.   
    20.         ConfigurableApplicationContext context = null;  
    21.         context = new ClassPathXmlApplicationContext("applicationContext.xml");  
    22.   
    23.         UserDao userDao = context.getBean(UserDaoImpl.class);  
    24.             userDao._test();  
    25.         UserEntity entity1 = new UserEntity();  
    26.         entity1.setId("5");  
    27.         entity1.setAge(1);  
    28.         entity1.setBirth(new Date());  
    29.         entity1.setPassword("asdfasdf");  
    30.         entity1.setRegionName("北京");  
    31.         entity1.setWorks(1);  
    32.         userDao.insert(entity1);  
    33.         userDao.update(entity1);  
    34.         userDao.createCollection();  
    35.       
    36.         List<UserEntity> list = userDao.findList(0, 10);  
    37.         for (UserEntity e : list) {  
    38.             System.out.println("all - id=" + e.getId() + ", age=" + e.getAge() + ", password=" + e.getPassword() + ", regionName=" + e.getRegionName() + ", special=" + Arrays.toString(e.getSpecial())  
    39.                     + ", name=" + e.getName().getUsername() + "-" + e.getName().getNickname() + ", birth=" + e.getBirth());  
    40.         }  
    41.   
    42.         list = userDao.findListByAge(1);  
    43.         for (UserEntity e : list) {  
    44.             System.out.println("age=1 - id=" + e.getId() + ", age=" + e.getAge() + ", password=" + e.getPassword() + ", regionName=" + e.getRegionName() + ", special="  
    45.                     + Arrays.toString(e.getSpecial()) + ", name=" + e.getName().getUsername() + "-" + e.getName().getNickname() + ", birth=" + e.getBirth());  
    46.         }  
    47.   
    48.         UserEntity e = userDao.findOne("1");  
    49.         System.out.println("id=1 - id=" + e.getId() + ", age=" + e.getAge() + ", password=" + e.getPassword() + ", regionName=" + e.getRegionName() + ", special=" + Arrays.toString(e.getSpecial())  
    50.                 + ", name=" + e.getName().getUsername() + "-" + e.getName().getNickname() + ", birth=" + e.getBirth());  
    51.   
    52.         e = userDao.findOneByUsername("limingnihao");  
    53.         System.out.println("username=limingnihao - id=" + e.getId() + ", age=" + e.getAge() + ", password=" + e.getPassword() + ", regionName=" + e.getRegionName() + ", special="  
    54.                 + Arrays.toString(e.getSpecial()) + ", name=" + e.getName().getUsername() + "-" + e.getName().getNickname() + ", birth=" + e.getBirth());  
    55.   
    56.           
    57.         System.out.println("DONE!");  
    58.     }  
    59.   
    60. }  
  • 相关阅读:
    标准库类型string
    auto与decltype
    理解复合类型的声明
    复合类型
    标识符and名字的作用域
    tar 命令详解(持续更新)
    Linux中的update和upgrade的作用
    mysql中文乱码
    Linux 安装MySql——apt-get版
    Linux mysql开启远程访问
  • 原文地址:https://www.cnblogs.com/bigben0123/p/7458756.html
Copyright © 2011-2022 走看看