01、spring数据源的配置以及多数据源的切换

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&amp;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&amp;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

发布了740 篇原创文章 · 获赞 65 · 访问量 10万+

猜你喜欢

转载自blog.csdn.net/qq_41723615/article/details/104270778
今日推荐