`

spring中配置多数据库读取

 
阅读更多

applicationContext.xml

<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:context="http://www.springframework.org/schema/context" xmlns:aop="http://www.springframework.org/schema/aop" xmlns:tx="http://www.springframework.org/schema/tx" xmlns:p="http://www.springframework.org/schema/p" xsi:schemaLocation="
            http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-3.0.xsd
            http://www.springframework.org/schema/aop http://www.springframework.org/schema/aop/spring-aop-3.0.xsd
            http://www.springframework.org/schema/tx http://www.springframework.org/schema/tx/spring-tx-3.0.xsd
            http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-3.0.xsd">

	<context:annotation-config />
	<context:component-scan base-package="cn.springmvc" />
	<bean id="masterdataSource" class="org.apache.commons.dbcp.BasicDataSource">
		<property name="driverClassName" value="com.mysql.jdbc.Driver">
		</property>
		<property name="url" value="jdbc:mysql://localhost:3306/myoa?useUnicode=true&amp;characterEncoding=UTF-8">
		</property>
		<property name="username" value="root"></property>
		<property name="password" value="system"></property>
	</bean>
	<bean id="slavedataSource" class="org.apache.commons.dbcp.BasicDataSource">
		<property name="driverClassName" value="com.mysql.jdbc.Driver">
		</property>
		<property name="url" value="jdbc:mysql://localhost:3306/myoa2?useUnicode=true&amp;characterEncoding=UTF-8">
		</property>
		<property name="username" value="root"></property>
		<property name="password" value="system"></property>
	</bean>
	<bean id="dataSource" class="cn.springmvc.rw.DataSourceSwitch">
		<property name="targetDataSources">
			<map key-type="java.lang.String">
				<entry key="master" value-ref="masterdataSource" />
				<entry key="slave" value-ref="slavedataSource" />
			</map>
		</property>
		<property name="defaultTargetDataSource" ref="masterdataSource" />
	</bean>
	<aop:aspectj-autoproxy></aop:aspectj-autoproxy>
	<bean id="manyDataSourceAspect" class="cn.springmvc.rw.DataSourceAspect" />
	<aop:config>
		<aop:aspect id="c" ref="manyDataSourceAspect">
			<aop:pointcut id="tx" expression="execution(* cn.springmvc.dao.*.*(..))" />
			<aop:before pointcut-ref="tx" method="before" />
		</aop:aspect>
	</aop:config>




	<!-- mybatis文件配置,扫描所有mapper文件  configLocation为mybatis属性 mapperLocations为所有mapper-->
	<bean id="sqlSessionFactory" class="org.mybatis.spring.SqlSessionFactoryBean" p:dataSource-ref="dataSource" p:configLocation="classpath:mybatis-config.xml" p:mapperLocations="classpath:mapper/*.xml" />

	<!-- spring与mybatis整合配置,扫描所有dao -->
	<bean class="org.mybatis.spring.mapper.MapperScannerConfigurer" p:basePackage="cn.springmvc.dao" p:sqlSessionFactoryBeanName="sqlSessionFactory" />

	<!-- 对数据源进行事务管理 -->
	<bean id="transactionManager" class="org.springframework.jdbc.datasource.DataSourceTransactionManager" p:dataSource-ref="dataSource" />
</beans>

 

package cn.springmvc.rw;

public class DataSourceUtil {
	public static final ThreadLocal<String> holder = new ThreadLocal<String>();

	public static void putDataSource(String name) {
		holder.set(name);
	}

	public static String getDataSouce() {
		return holder.get();
	}
}

 

package cn.springmvc.rw;

import org.springframework.jdbc.datasource.lookup.AbstractRoutingDataSource;

public class DataSourceSwitch extends AbstractRoutingDataSource {

	@Override
	protected Object determineCurrentLookupKey() {
		System.out.println("============"+DataSourceUtil.getDataSouce());
		return DataSourceUtil.getDataSouce();
	}

}

 

package cn.springmvc.rw;

import org.aspectj.lang.JoinPoint;

public class DataSourceAspect {

	public void before(JoinPoint point) {
		String method = point.getSignature().getName();
		System.out.println("拦截的方法名为"+method);
		if (method.startsWith("save")||method.startsWith("update")||method.startsWith("delete")) {
			DataSourceUtil.putDataSource("master");
		}else{
			DataSourceUtil.putDataSource("slave");
		}
	}
}

 

package cn.springmvc.test;

import org.junit.Before;
import org.junit.Test;
import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;

import cn.springmvc.model.User;
import cn.springmvc.service.UserService;

public class UserTest {
	private UserService userService;
	@Before
	public void before() {
		@SuppressWarnings("resource")
		ApplicationContext context = new ClassPathXmlApplicationContext(new String[] { "classpath:conf/applicationContext.xml", "classpath:mybatis-config.xml" });
		userService = (UserService) context.getBean("userService");
	}

	@Test
	public void addUser() {
		User user = new User();
		user.setNickname("你好");
		user.setState(2);
		System.out.println(userService.insertUser(user));
	}
}

 

package cn.springmvc.service;

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

import cn.springmvc.dao.UserDAO;
import cn.springmvc.model.User;

@Service
public class UserService {
	@Autowired
	private UserDAO userDAO;
	public int insertUser(User user) {
		return userDAO.insertUser(user);
	}
}

 

package cn.springmvc.model;
 
 
/**
 * 用户表
 */
public class User {
 
    private int id;
    private int state;
    private String nickname;
    public int getId() {
        return id;
    }
    public void setId(int id) {
        this.id = id;
    }
    public int getState() {
        return state;
    }
    public void setState(int state) {
        this.state = state;
    }
    public String getNickname() {
        return nickname;
    }
    public void setNickname(String nickname) {
        this.nickname = nickname;
    }
}

 

package cn.springmvc.dao;
 
import cn.springmvc.model.User;
 
 
public interface UserDAO {
 
    /**
     * 添加新用户
     * @param user
     * @return
     */
    public int insertUser(User user);
     
     
}

 

 

分享到:
评论

相关推荐

    定时器(quartz+spring)读取数据库配置

    在`quartz.properties`文件中,配置数据库连接参数和存储策略: ```properties org.quartz.scheduler.instanceName = MyScheduler org.quartz.dataSource.myDS.jndiURL = jndi://myDataSource org.quartz.jobStore....

    Spring+Quartz 从数据库中获取定时任务和定时时间,动态实现对定时任务的增删改查

    这样,当Quartz启动时,它会从数据库中读取所有作业和触发器,而不是覆盖现有的任务。 3. **动态增删改查**:为了实现动态的定时任务管理,我们需要创建一个服务层,该层负责与数据库交互,进行CRUD操作。例如,...

    spring Batch实现数据库大数据量读写

    数据库读取 Spring Batch 提供了多种 `ItemReader` 实现,如 JdbcPagingItemReader 和 JdbcCursorItemReader,用于从数据库中读取数据。JdbcPagingItemReader 适用于按页读取数据,而 JdbcCursorItemReader 则是...

    Spring配置三种数据源及从属性文件中读取DB连接四要素

    本篇文章将详细讲解如何在Spring配置文件中注册三种不同类型的数据库数据源,并从属性文件中读取数据库连接的四个关键要素:URL、用户名、密码和驱动类名。 一、单数据源配置 首先,我们来看最基本的单数据源配置...

    Spring Batch读取txt文件并写入数据库的方法教程

    在本教程中,我们将探讨如何使用 Spring Batch 读取文本(txt)文件,并将读取到的数据处理后写入数据库。 首先,我们需要创建一个 Maven 项目,并在 `pom.xml` 文件中添加必要的依赖。这些依赖包括 `spring-boot-...

    spring 重新动态加载数据库或xml中的bean,可以不用重启tomcat

    spring 重新动态加载数据库或xml中的bean,可以不用重启tomcat

    spring-boot 2.0.2 数据库配置定时任务

    spring-boot 2.0.2.RELEASE,将定时任务配置在数据库,启动项目的时候,用mybatis读取数据库,实例化对象,并设定定时任务。如果需要新增,减少,修改定时任务,仅需要修改数据库资料,并重启项目即可,无需改代码。...

    Springboot中使用数据库配置定时任务

    在Spring Boot应用中,我们可以利用其强大的自动化配置和Spring Task模块来实现基于数据库配置的定时任务。Spring Task是Spring框架的一部分,它提供了丰富的定时和调度功能,使得在Java应用中执行周期性任务变得...

    Spring+Servlet读取数据库返回JSON数据(源码).zip

    为了从数据库读取数据并以JSON格式返回,我们可能会有以下步骤: 1. 配置Spring的数据库连接,通常在`applicationContext.xml`或`application.properties`中设置数据源。 2. 创建一个服务类(Service),使用Spring...

    spring-batch同步数据库mysql源码

    2. **DataSource**:Spring-Batch通过DataSource与数据库进行交互,配置数据库连接信息。 3. **JdbcPagingItemReader和JdbcBatchItemWriter**:这两个类分别用于分页读取数据和批量写入数据,是Spring-Batch与...

    Spring系统多数据库动态切换,完整demo直接使用

    总之,这个demo提供了Spring MVC和Spring Data JPA环境下多数据库动态切换的完整实现,包括数据源配置、动态数据源的创建、以及如何在业务代码中进行切换。通过学习和实践这个示例,你可以更好地理解和掌握如何在...

    多个数据库配置

    要连接MySQL,我们需要在应用程序中配置数据库连接参数,如主机名、端口号、用户名、密码和数据库名。例如,使用Java的JDBC连接: ```java String url = "jdbc:mysql://localhost:3306/dbname"; String user = ...

    ssh配置多个数据库

    SSH 配置多个数据库 ...在本文中,我们介绍了如何使用 Spring 和 Hibernate 配置多个数据库,实现动态切换数据库。这种方法可以提高系统的灵活性和可扩展性,减少系统的耦合度,提高了系统的可维护性。

    springaop多数据库读写分离

    在IT行业中,数据库读写分离是一种常见的优化策略,主要用于提高系统的并发处理能力和数据读取效率。Spring AOP(面向切面编程)与MyBatis框架的结合应用,可以帮助我们实现这一目标。以下将详细讲解如何利用Spring ...

    spring-demo09-读取properties配置文件内容.zip

    在Spring框架中,读取`properties`配置文件是常见的任务,用于管理应用程序的配置信息,如数据库连接字符串、服务端口、系统环境变量等。本文将深入探讨如何在Spring项目中实现这一功能。 首先,我们需要一个`...

    spring配置文件加密实现

    本文将深入探讨如何在Java环境中,利用TE网络技术实现Spring配置文件的加密。 首先,我们需要理解Spring配置文件的基本结构。Spring的配置文件通常为XML格式,如`applicationContext.xml`,它包含了bean的定义、...

    Spring cloud Oauth2的密码模式数据库方式实现登录授权验证

    综上所述,实现“Spring Cloud Oauth2的密码模式数据库方式实现登录授权验证”涉及多个步骤,包括设置Authorization Server和Resource Server,配置数据库,实现用户认证逻辑,以及处理令牌的生成与管理。...

    spring mvc 读取xml文件数据库配置参数的方法

    Spring MVC 读取 XML 文件数据库配置参数的方法 在 Spring MVC 框架中,配置参数的管理是一个非常重要的方面。如何将数据库配置参数存储在 XML 文件中,并在项目中读取它们,是一个棘手的问题。本文将为大家介绍...

    Spring+Ajax+EcCharts,数据库数据读取到显示

    在本项目中,我们主要探讨如何使用Spring框架与Ajax技术结合,从数据库中获取数据,然后利用ECharts库将这些数据以条形图的形式展示出来。以下是对各个知识点的详细说明: 1. **Spring框架**:Spring是一个开源的...

Global site tag (gtag.js) - Google Analytics