springboot集成多数据源代码

来源:互联网 发布:58中国经纪人网络平台 编辑:程序博客网 时间:2024/06/06 01:20

(1) 启动类代码

Apppackage com.app;

import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.context.annotation.ComponentScan;
//扫描包结构
@ComponentScan(basePackages={"com.controller","com.datasources.test1","com.datasources.test2","com.data"})
@SpringBootApplication//启动注解
public class App {
    public static void main(String[] args) {
        SpringApplication.run(App.class, args);
    }
}

(2)com.data下对应的配置数据源的连接代码
 1.TestData的代码(1)

  package com.data;
import javax.sql.DataSource;

import org.apache.ibatis.session.SqlSessionFactory;
import org.mybatis.spring.SqlSessionFactoryBean;
import org.mybatis.spring.SqlSessionTemplate;
import org.mybatis.spring.annotation.MapperScan;
import org.springframework.beans.factory.annotation.Qualifier;
import org.springframework.boot.autoconfigure.jdbc.DataSourceBuilder;
import org.springframework.boot.context.properties.ConfigurationProperties;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.context.annotation.Primary;
import org.springframework.core.io.support.PathMatchingResourcePatternResolver;
import org.springframework.jdbc.datasource.DataSourceTransactionManager;

@Configuration//注入spring容器中
@MapperScan(basePackages="com.datasources.test1",sqlSessionFactoryRef="testsqlSessionFactory")//扫描数据源的包结构
public class TestData {
     
     @Bean(name="test1DataSource")
     @ConfigurationProperties(prefix="spring.datasource.test1")//指定哪一个数据源
    public DataSource testDataSource(){
        
        return DataSourceBuilder.create().build();
    }
    
    
    
     @Bean(name="testsqlSessionFactory")      
    
    public SqlSessionFactory testsqlSessionFactory(@Qualifier("test1DataSource") DataSource dataSource) throws Exception{
        
           SqlSessionFactoryBean bean = new SqlSessionFactoryBean();
           bean.setDataSource(dataSource);
           
           /*
            *
            *
            * 配置一些分页信息
            * bean.setMapperLocations(
            
                   
                   new PathMatchingResourcePatternResolver().getResources("classpath:mybatis/mapper/*.xml")
                   
                   );*/
           
        return bean.getObject();
    }
    
     @Bean(name="test1Transaction")    
    
        public DataSourceTransactionManager testTransaction(@Qualifier("test1DataSource") DataSource dataSource){
             return new DataSourceTransactionManager(dataSource);
        }
    
    
     @Bean(name="test1sqlSessionTeplate")      
    public SqlSessionTemplate testsqlSessionTeplate(@Qualifier("testsqlSessionFactory") SqlSessionFactory sqlSessionFactory ) throws Exception{
         return new SqlSessionTemplate(sqlSessionFactory);
    }
    
}

//配置信息如同appliction.xml信息类似
2.TestData2类

package com.data;

 
import javax.sql.DataSource;

import org.apache.ibatis.session.SqlSessionFactory;
import org.mybatis.spring.SqlSessionFactoryBean;
import org.mybatis.spring.SqlSessionTemplate;
import org.mybatis.spring.annotation.MapperScan;
import org.springframework.beans.factory.annotation.Qualifier;
import org.springframework.boot.autoconfigure.jdbc.DataSourceBuilder;
import org.springframework.boot.context.properties.ConfigurationProperties;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.context.annotation.Primary;
import org.springframework.core.io.support.PathMatchingResourcePatternResolver;
import org.springframework.jdbc.datasource.DataSourceTransactionManager;

@Configuration//注入spring容器中
@MapperScan(basePackages="com.datasources.test2",sqlSessionFactoryRef="test2sqlSessionFactory")//扫描数据源的包结构
public class TestData2 {
     
     @Bean(name="test2DataSource")
     @ConfigurationProperties(prefix="spring.datasource.test2")//指定哪一个数据源信息
     @Primary
    public DataSource testDataSource(){
        
        return DataSourceBuilder.create().build();
    }
    
    
    
     @Bean(name="test2sqlSessionFactory")      
     @Primary
    public SqlSessionFactory testsqlSessionFactory(@Qualifier("test2DataSource") DataSource dataSource) throws Exception{
        
           SqlSessionFactoryBean bean = new SqlSessionFactoryBean();
           bean.setDataSource(dataSource);
           
           /*
            *
            *
            * 配置一些分页信息
            * bean.setMapperLocations(
            
                   
                   new PathMatchingResourcePatternResolver().getResources("classpath:mybatis/mapper/*.xml")
                   
                   );*/
           
        return bean.getObject();
    }
    
     @Bean(name="test2Transaction")    
     @Primary
        public DataSourceTransactionManager testTransaction(@Qualifier("test2DataSource") DataSource dataSource){
             return new DataSourceTransactionManager(dataSource);
        }
    
    
     @Bean(name="test2sqlSessionTeplate")      
     @Primary
    public SqlSessionTemplate testsqlSessionTeplate(@Qualifier("test2sqlSessionFactory") SqlSessionFactory sqlSessionFactory ) throws Exception{
         return new SqlSessionTemplate(sqlSessionFactory);
    }
    
}

(3)数据源连接信息application.properties

  spring.mvc.view.prefix =/WEB-INF/view/
spring.mvc.view.suffix = .jsp


#spring.datasource.test1自定义连接数据源
spring.datasource.test1.url=jdbc:mysql://localhost/test1
spring.datasource.test1.username=root
spring.datasource.test1.password=root
spring.datasource.test1.driver-class-name=com.mysql.jdbc.Driver
#spring.datasource.test2自定义连接数据源
spring.datasource.test2.url=jdbc:mysql://localhost/test2
spring.datasource.test2.username=root
spring.datasource.test2.password=root
spring.datasource.test2.driver-class-name=com.mysql.jdbc.Driver


(4)com.datasources.test1包下的的代码

 //mapper层

package com.datasources.test1.mapping;

import org.apache.ibatis.annotations.Insert;
import org.apache.ibatis.annotations.Param;

import com.pojo.User;

public interface UserMapping {

    
    
    @Insert("insert into t_user(id,name) values(#{id},#{name})")
    public int getinserts(@Param("id") Integer id,@Param("name") String name);
    
}

 //service层

package com.datasources.test1.service;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;

import com.datasources.test1.mapping.UserMapping;

@Service
public class UserService {

    @Autowired
    private UserMapping usermapping;
    
    public int getinserts(Integer id,String name){
        return usermapping.getinserts(id, name);
    }
}


(4)com.datasources.test2包下的的代码

   //mapper层

package com.datasources.test2.mapping;

import org.apache.ibatis.annotations.Insert;
import org.apache.ibatis.annotations.Param;

import com.pojo.User;

public interface User2Mapping {  
    @Insert("insert into t_user(id,name) values(#{id},#{name})")
    public int getinsert(@Param("id") Integer id,@Param("name") String name);
    
}

     //service层

     package com.datasources.test2.service;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;

import com.datasources.test1.mapping.UserMapping;
import com.datasources.test2.mapping.User2Mapping;

@Service
public class User2Service {

    @Autowired
    private User2Mapping user2mapping;
    
    public int getinsert(Integer id,String name){
        return user2mapping.getinsert(id, name);
    }
}

   (5)注意controller层

    package com.controller;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.ResponseBody;
import org.springframework.web.bind.annotation.RestController;

import com.datasources.test1.service.UserService;
import com.datasources.test2.service.User2Service;
/*import com.mapper.UserMapper;*/
import com.pojo.User;


@RestController
public class UserController {
    
    @Autowired
    private UserService userService;
    
    @Autowired
    private User2Service user2Service;
    
    @RequestMapping("/add")
    public String add(){
        
        userService.getinserts(5, "kkk");
        
        user2Service.getinsert(6, "bb");
        return "scuess";
    }
    
 


其下运行后效果图