controller:
import com.guofeng.pojo.Users;
import com.guofeng.test01.service.UserServiceTest01;
import com.guofeng.test02.service.UserServiceTest02;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
@RestController
public class UserMoreDataSourceController {
@Autowired
private UserServiceTest01 userServiceTest01;
@Autowired
private UserServiceTest02 userServiceTest02;
@RequestMapping("/findByName01")
public String findByName01(String username){
Users byName = null;
try {
byName = userServiceTest01.findByName(username);
} catch (Exception e) {
e.printStackTrace();
}
return byName==null?"1111":byName.toString();
}
@RequestMapping("/insertUser01")
public int insertUser01(String username, String password) {
int i = 0;
try {
i = userServiceTest01.insertUser(username, password);
} catch (Exception e) {
e.printStackTrace();
}
return i;
}
@RequestMapping("/findByName02")
public String findByName02(String username){
Users byName = null;
try {
byName = userServiceTest02.findByName(username);
} catch (Exception e) {
e.printStackTrace();
}
return byName==null?"1111":byName.toString();
}
@RequestMapping("/insertUser02")
public int insertUser02(String username, String password) {
int i = 0;
try {
i = userServiceTest02.insertUser(username, password);
} catch (Exception e) {
e.printStackTrace();
}
return i;
}
}
pojo:
import lombok.Data;
@Data
public class Users {
private int id;
private String username;
private String password;
}
mapper:
import com.guofeng.pojo.Users;
import org.apache.ibatis.annotations.Insert;
import org.apache.ibatis.annotations.Param;
import org.apache.ibatis.annotations.Select;
import org.springframework.stereotype.Repository;
@Repository
public interface UserMapperTest01 {
@Select("Select * from users where username = #{username}")
public Users findByName(@Param("username") String username);
@Insert("insert into users(username,password) values (#{username},#{password})")
public int insertUser(@Param("username") String username, @Param("password") String password);
}
service:
import com.guofeng.pojo.Users;
public interface UserServiceTest01 {
public Users findByName(String username) throws Exception;
public int insertUser(String username, String password) throws Exception;
}
serviceImpl:
import com.guofeng.pojo.Users;
import com.guofeng.test01.mapper.UserMapperTest01;
import com.guofeng.test01.service.UserServiceTest01;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
@Service
@Slf4j
@Transactional
public class UserServiceImplTest01 implements UserServiceTest01 {
@Autowired
private UserMapperTest01 userMapperTest01;
@Override
@Transactional(readOnly = true)
public Users findByName(String username) throws Exception{
Users byName = userMapperTest01.findByName(username);
return byName;
}
@Override
public int insertUser(String username, String password) throws Exception{
int i = userMapperTest01.insertUser(username, password);
return i;
}
}
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.context.properties.ConfigurationProperties;
import org.springframework.boot.jdbc.DataSourceBuilder;
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;
import javax.sql.DataSource;
@Configuration
@MapperScan(basePackages = "com.guofeng.test01.mapper",sqlSessionFactoryRef = "test01SqlSessionFactory")
public class DataSource01Config {
@Bean(name = "test01DataSource")
@ConfigurationProperties(prefix = "spring.datasource.test01")
@Primary
public DataSource testDataSource(){
return DataSourceBuilder.create().build();
}
@Bean(name = "test01SqlSessionFactory")
@Primary
public SqlSessionFactory testSqlSessionFactory(@Qualifier("test01DataSource") DataSource dataSource) throws Exception{
SqlSessionFactoryBean bean = new SqlSessionFactoryBean();
bean.setDataSource(dataSource);
/*bean.setMapperLocations(
new PathMatchingResourcePatternResolver().getResources("classpath:mybatis/mapper/test01/*.xml")
);*/
return bean.getObject();
}
@Bean(name = "test01DataSourceTransactionManager")
@Primary
public DataSourceTransactionManager testDataSourceTransactionManager(@Qualifier("test01DataSource") DataSource dataSource){
return new DataSourceTransactionManager(dataSource);
}
@Bean(name = "test01SqlSessionTemplate")
@Primary
public SqlSessionTemplate testSqlSessionTemplate(@Qualifier("test01SqlSessionFactory") SqlSessionFactory sqlSessionFactory) throws Exception {
return new SqlSessionTemplate(sqlSessionFactory);
}
}
注意:MapperScan扫描mapper的时候一定要写全路径,并且不能用*号