spring配置数据源
我们spring配置数据源常用有三种方式
第一种就是一种非常普通的方式
<bean id="dataSource" class="org.apache.commons.dbcp.BasicDataSource"
destroy-method="close">
<property name="driverClassName" value="com.mysql.jdbc.Driver" />
<property name="url"
value="jdbc:mysql://localhost:3306/smbms?useUnicode=true&characterEncoding=utf-8" />
<property name="username" value="root" />
<property name="password" value="root" />
</bean>
我们看得出,这是一种写的很死的方式,下面还有二种就是写的就是比较灵活的方式
使用属性文件配置数据源
我们在Resource文件夹中create(创建)一个文件名为database后缀名为properties的文件
这个文件我们放入我们数据库的数据库JDBC的连接mysql驱动的语句
driver=com.mysql.jdbc.Driver
url=jdbc:mysql://localhost:3306/smbms?useUnicode=true&characterEncoding=utf-8
user=root
password=root
下面我们就是进行配置数据源
<!-- 1、配置数据源 -->
<bean class="org.springframework.beans.factory.config.PropertyPlaceholderConfigurer">
<property name="location">
<value>classpath:database.properties</value>
</property>
</bean>
接着在下面添加我们spring的数据库配置
<bean id="dataSource" class="org.apache.commons.dbcp.BasicDataSource" destroy-method="close">
<property name="driverClassName" value="${driver}"/>
<property name="url" value="${url}"/>
<property name="username" value="${user}"/>
<property name="password" value="${password}"/>
</bean>
value里面的值填入${}
在{}括号里面填入的你的database文件的对应的数据,进行匹配
还有一种方式就是:
3.使用JNDI配置数据源
如果应用部署在高性能的应用服务器(如Tomcat,WebLogic上),我们可能使用程序服务器的本身提供的的数据源,应用服务器的数据源使用JNDI的方式使用者调用,Spring为此专门提供1引用JNDI资源的JNDIObjectFactoryBean类
使用JNDI的方式配置数据源
==前提是必须在应用服务器上配置好数据源,我们以Tomcat为例,配置数据源需要把数据库驱动文件放到Tomcat的lib的目录下,并修改Tomcat的conf目录下的context.xml文件,配置数据源代码==
<Resource name="jdbc/news" auth="Container" type="javax.sql.DataSource"
maxActive="100" maxIdle="30" maxWait="10000" username="root"
password="root" driverClassName="com.mysql.jdbc.Driver"
url="jdbc:mysql://localhost:3306/newsmanagersystem?
useUnicode=true&characterEncoding=utf-8"/>
</Context>
然后再回到我们spring配置文件中,添加代码
<bean id="dataSource" class="org.springframework.jndi.JndiObjectFactoryBean">
<!-- 通过jndiName指定引用的JNDI数据源名称 -->
<property name="jndiName" value="java:comp/env/jdbc/smbms"/>
</bean>
这样子我们就完成spring的配置数据源了
原文:https://www.cnblogs.com/liujunwei/p/11573287.html
多数据源的切换
多库配置:
由于业务需要,项目要同时使用多个数据库进行业务开发:
首先,我们必须在application.property中自定义两个数据源的配置,一个使用first.datasource.*,另一个使用second.datasource.*,为了能使别人一眼看出连接的是什么库,可以使用数据库命名,比如user库,则可以使用user.datasource.*,在使用多数据源的时候,所有必要配置都不能省略。
first.datasource.url=jdbc:mysql://localhost/first
first.datasource.username=dbuser1
first.datasource.password=dbpass1
first.datasource.driver-class-name=com.mysql.jdbc.Driver
first.datasource.type=com.alibaba.druid.pool.DruidDataSource//我用的是Druid,也可以不加用默认的
second.datasource.url=jdbc:mysql://localhost/second
second.datasource.username=dbuser2
second.datasource.password=dbpass2
second.datasource.driver-class-name=com.mysql.jdbc.Driver
second.datasource.type=com.alibaba.druid.pool.DruidDataSource
直接上代码,我的做法是将两个数据源用两个配置类创建:
@Configuration
@MapperScan(basePackages = {"com.user.server.dao"}, sqlSessionTemplateRef = "userSqlSessionTemplate")
public class UserMybatisConfig {
@Bean(name = "userDataSource")
@Primary //必须加此注解,不然报错,下一个类则不需要添加
@ConfigurationProperties(prefix = "first.datasource") // prefix值必须是application.properteis中对应属性的前缀
public DataSource userDataSource() {
return DataSourceBuilder.create().build();
}
@Bean
public SqlSessionFactory userSqlSessionFactory(@Qualifier("userDataSource") DataSource dataSource) throws Exception {
SqlSessionFactoryBean bean = new SqlSessionFactoryBean();
bean.setDataSource(dataSource);
//添加XML目录
ResourcePatternResolver resolver = new PathMatchingResourcePatternResolver();
try {
bean.setMapperLocations(resolver.getResources("classpath*:com/user/server/dao/mapping/*.xml"));
return bean.getObject();
} catch (Exception e) {
e.printStackTrace();
throw new RuntimeException(e);
}
}
@Bean
public SqlSessionTemplate userSqlSessionTemplate(@Qualifier("userSqlSessionFactory") SqlSessionFactory sqlSessionFactory) throws Exception {
SqlSessionTemplate template = new SqlSessionTemplate(sqlSessionFactory); // 使用上面配置的Factory
return template;
}
}
@Configuration
@MapperScan(basePackages = {"com.airmi.server.dao"}, sqlSessionTemplateRef = "autoTestSqlSessionTemplate")
public class AutoTestMybatisConfig {
@Bean
@ConfigurationProperties(prefix = "autotest.datasource")
public DataSource autoTestDataSource() {
return DataSourceBuilder.create().build();
}
@Bean
public SqlSessionTemplate autoTestSqlSessionTemplate(@Qualifier("autoTestSqlSessionFactory") SqlSessionFactory sqlSessionFactory) throws Exception {
SqlSessionTemplate template = new SqlSessionTemplate(sqlSessionFactory);
return template;
}
@Bean
public SqlSessionFactory autoTestSqlSessionFactory(@Qualifier("autoTestDataSource") DataSource dataSource) throws Exception {
SqlSessionFactoryBean bean = new SqlSessionFactoryBean();
bean.setDataSource(dataSource);
//添加XML目录
ResourcePatternResolver resolver = new PathMatchingResourcePatternResolver();
try {
bean.setMapperLocations(resolver.getResources("classpath*:com/airmi/server/dao/mapping/*.xml"));
return bean.getObject();
} catch (Exception e) {
e.printStackTrace();
throw new RuntimeException(e);
}
}
}
@Primary //该注解表示在同一个接口有多个实现类可以注入的时候,默认选择哪一个,而不是让autowire注解报错,官网要求当多个数据源时,必须指定一个datasource,另一个datasource则不用添加。
@Qualifier 根据名称进行注入,通常是在具有相同的多个类型的实例的一个注入(例如有多个DataSource类型的实例)。
@MapperScan(basePackages = {"com.user.server.dao"}, sqlSessionTemplateRef = "userSqlSessionTemplate") basePackages为mapper所在的包,sqlSessionTemplateRef要引用的实例。
原文:https://blog.csdn.net/mxw2552261/article/details/78640062