在学习多数据源配置的时候出现了这个错误,与springboot版本比较高有关系,解决方式
spring.datasource.url 改为 spring.datasource.jdbc-url
spring.datasource.one.jdbc-url=jdbc:mysql://127.0.0.1:3306/test
# spring.datasource.one.url=jdbc:mysql://127.0.0.1:3306/test
spring.datasource.one.username=root
spring.datasource.one.password=123456
spring.datasource.one.driverClassName=com.mysql.jdbc.Driver
spring.datasource.two.jdbc-url=jdbc:mysql://127.0.0.1:3306/test2
# spring.datasource.two.url=jdbc:mysql://127.0.0.1:3306/test2
spring.datasource.two.username=root
spring.datasource.two.password=123456
spring.datasource.two.driverClassName=com.mysql.jdbc.Driver
对应的配置Bean
import javax.sql.DataSource;
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.jdbc.core.JdbcTemplate;
import org.springframework.transaction.annotation.EnableTransactionManagement;
@Configuration
@EnableTransactionManagement
public class MultiDataSourceConfig {
@Primary
@Bean(name = "oneDataSource")
@Qualifier("oneDataSource")
@ConfigurationProperties(prefix="spring.datasource.one")
public DataSource oneDataSource() {
return DataSourceBuilder.create().build();
}
@Bean(name = "twoDataSource")
@Qualifier("twoDataSource")
@ConfigurationProperties(prefix="spring.datasource.two")
public DataSource twoDataSource() {
return DataSourceBuilder.create().build();
}
@Primary
@Bean(name = "oneJdbcTemplate")
public JdbcTemplate oneJdbcTemplate(@Qualifier("oneDataSource") DataSource dataSource) {
return new JdbcTemplate(dataSource);
}
@Bean(name = "twoJdbcTemplate")
public JdbcTemplate twoJdbcTemplate(@Qualifier("twoDataSource") DataSource dataSource) {
return new JdbcTemplate(dataSource);
}
}
Dao实现类
@Repository
public class UserDaoImpl implements UserDao {
@Resource(name="oneJdbcTemplate")
protected JdbcTemplate jdbcTemplate1;
@Resource(name="twoJdbcTemplate")
protected JdbcTemplate jdbcTemplate2;
@Override
public User selectByPrimaryKey(Integer id) {
List<User> list1 = jdbcTemplate1.query("select * from user where id = ?"
, new Object[]{id}, new BeanPropertyRowMapper<User>(User.class));
User u1 = null;
User u2 = null;
if(null != list1 && list1.size()>0){
u1 = list1.get(0);
System.out.println("数据源1查询结果 "+u1.getName());
}
List<User> list2 = jdbcTemplate2.query("select * from user where id = ?", new Object[]{id}
, new BeanPropertyRowMapper<User>(User.class));
if(null != list2 && list2.size()>0){
u2 = list1.get(0);
System.out.println("数据源2查询结果 "+u2.getName());
}
return u1;
}
}