`
ww1224
  • 浏览: 28047 次
  • 性别: Icon_minigender_1
  • 来自: 上海
文章分类
社区版块
存档分类
最新评论

Spring MVC 3.X解决一个web项目关联多个数据源(数据库)

 
阅读更多
[align=left][/align]今天项目里涉及到需要一个项目关联多个数据库。框架又是用的spring MVC 以前也没有整过。对spring 的注解也多少有点了解。
首先介绍下单个的数据库连接配置。
jdbc.properties文件中的属性
jdbc.driverClassName=com.mysql.jdbc.Driver
jdbc.url=jdbc:mysql://172.17.0.68:3306/xh_bidding?autoReconnect=true&useUnicode=true&characterEncoding=UTF-8
jdbc.username=root
jdbc.password=
spring配置文件app-config.xml
<context:component-scan base-package="com.xxx.news" />
	<bean id="dataSource" name="dataSource" class="org.springframework.jdbc.datasource.DriverManagerDataSource">
		<property name="driverClassName" value="${jdbc.driverClassName}" />
		<property name="url" value="${jdbc.url}" />
		<property name="username" value="${jdbc.username}" />
		<property name="password" value="${jdbc.password}" />
[color=red]<context:property-placeholder location="classpath:jdbc.properties" />[/color]	</bean>

spring先说明声明一个com.xxx.news下的全局变量既bean---dataSource。这个大家都懂的。里面是用EL表达式取值。红色的说明文件路径。
java-DAO代码
public abstract class BaseDAO extends Base {
	private JdbcTemplate jdbcTemplate;
	private NamedParameterJdbcTemplate namedParameterJdbcTemplate;
		
	
	
	@Autowired
		public void setDataSource(DataSource dataSource) {
		this.jdbcTemplate = new JdbcTemplate(dataSource);
		this.namedParameterJdbcTemplate = new NamedParameterJdbcTemplate(
				dataSource);
	}
		

	public JdbcTemplate getJdbcTemplate() {
		return jdbcTemplate;
	}
	
		public NamedParameterJdbcTemplate getNamedParameterJdbcTemplate() {
		return namedParameterJdbcTemplate;
	}
	
	}


默认情况下只需要这样写即可。spring的自动注入默认会根据类型来找到要注入的对象。既@Autowired
会找到dateSource这个bean。但是当发现有多个相同类型的bean时就不知道注入那一个了。默认好像会注入第一个。但是我不推荐默认写法,这样会让人混淆,不知道注入的对象和bean对象到底是通过什么方式关联的,很费解。
以上方式即可实现spring的单个数据源配置。
一下为多个数据源配置,其实没有想象中的那么复杂,当走通以后有点哭笑不得!但是摸出来还是值得的。
jdbc.properties文件中的属性
jdbc.driverClassName=com.mysql.jdbc.Driver
jdbc.url=jdbc:mysql://172.17.0.68:3306/xh_bidding?autoReconnect=true&useUnicode=true&characterEncoding=UTF-8
jdbc.username=root
jdbc.password=

#jdbc.driverClassName=com.mysql.jdbc.Driver
jdbc.url2=jdbc:mysql://172.17.0.68:3306/xh_payment?autoReconnect=true&useUnicode=true&characterEncoding=UTF-8
jdbc.username2=root
#jdbc.password2=
spring配置文件app-config.xml
<context:component-scan base-package="com.xxx.news" />
	<bean id="dataSource" name="dataSource" class="org.springframework.jdbc.datasource.DriverManagerDataSource">
		<property name="driverClassName" value="${jdbc.driverClassName}" />
		<property name="url" value="${jdbc.url}" />
		<property name="username" value="${jdbc.username}" />
		<property name="password" value="${jdbc.password}" />
	</bean>
	<bean id="dataSource2" name="dataSource2" class="org.springframework.jdbc.datasource.DriverManagerDataSource">
		<property name="driverClassName" value="${jdbc.driverClassName}" />
		<property name="url" value="${jdbc.url2}" />
		<property name="username" value="${jdbc.username2}" />
		<property name="password" value="${jdbc.password}" />
	</bean>
	<context:property-placeholder location="classpath:jdbc.properties" />

以上的意思没有什么变化
java代码 DAO
public abstract class BaseDAO extends Base {
	private JdbcTemplate jdbcTemplate;
	private JdbcTemplate jdbcTemplate2;
	private NamedParameterJdbcTemplate namedParameterJdbcTemplate;
	private NamedParameterJdbcTemplate namedParameterJdbcTemplate2;
	
	
	
	@Autowired
	@Resource(name="dataSource")
	public void setDataSource(DataSource dataSource) {
		this.jdbcTemplate = new JdbcTemplate(dataSource);
		this.namedParameterJdbcTemplate = new NamedParameterJdbcTemplate(
				dataSource);
	}
	
	@Autowired
	@Resource(name="dataSource2")
	public void setDataSource2(DataSource dataSource2){
		this.jdbcTemplate2 = new JdbcTemplate(dataSource2);
		this.namedParameterJdbcTemplate2 = new NamedParameterJdbcTemplate(dataSource2);
	}
	
	

	public JdbcTemplate getJdbcTemplate() {
		return jdbcTemplate;
	}
	
	public JdbcTemplate getJdbcTemplate2() {
		return jdbcTemplate2;
	}

	public NamedParameterJdbcTemplate getNamedParameterJdbcTemplate() {
		return namedParameterJdbcTemplate;
	}
	
	public NamedParameterJdbcTemplate getNamedParameterJdbcTemplate2() {
		return namedParameterJdbcTemplate2;
	}
}

当出现多个相同类型的bean时。需要指定所注入bean的name。这样就可以找到对应的bean对象。@Resource(name="dataSource")
以上jdbc连接方式也可以分开多个文件中写
这样即可实现。很简单,很方便!
感谢段总同志给予的指导。
分享到:
评论
4 楼 liufangmeng 2013-10-30  
2个事务一起之后 无法全部回滚吧。。
3 楼 lovekang89 2013-04-27  
lovekang89 写道
你好,上面之方式 只能显式调用jdbcTemplate 吧,还是事务不好管理吧,另外结合mybatis怎么使用呢?

如果有好的解决办法请联系一下我,Q 623362942 谢
2 楼 lovekang89 2013-04-27  
你好,上面之方式 只能显式调用jdbcTemplate 吧,还是事务不好管理吧,另外结合mybatis怎么使用呢?
1 楼 java_ZJian 2012-05-31  
谢谢!我们项目正好用到了 O(∩_∩)O

相关推荐

    Spring MVC配置双数据源实现一个java项目同时连接两个数据库的方法

    此外,如果项目使用了MyBatis,同样可以为每个数据源创建一个SqlSessionFactory,并通过`@MapperScan`注解和`@Transactional`注解配合使用,指定数据源。 在多数据源的场景下,还需要注意事务的管理。Spring支持...

    Spring MVC 大型项目源码

    Spring MVC 是一个强大的Java Web开发框架,用于构建高效、可维护和模块化的Web应用程序。它基于Spring IoC(Inversion of Control)容器和AOP(Aspect Oriented Programming)概念,提供了一个模型-视图-控制器...

    springmvc多数据源连接

    首先,我们需要在配置文件中定义多个数据源。在Spring中,我们可以使用`DataSource`接口的实现类,如Apache的`BasicDataSource`。为每个数据源创建一个Bean,并在配置文件(例如`applicationContext.xml`)中进行...

    SSM(Spring+SpringMVC+MyBatis)多数据源配置框架

    1. **数据源配置**:在Spring配置文件中,我们需要定义多个数据源bean,每个数据源对应一个数据库连接。这可能包括Druid或HikariCP这样的连接池配置。 2. **动态数据源**:Spring的AbstractRoutingDataSource类允许...

    springmvc多数据库

    每个数据源需要一个独立的`SqlSessionFactory`。 3. **配置Mapper**:为每个数据库创建对应的Mapper接口和Mapper XML文件,用于定义SQL查询和结果映射。在Spring中,可以使用`@MapperScan`注解扫描这些接口,并配置...

    springmvc_mybatis_多数据源

    当项目需求涉及到多个数据源时,如何在SpringMVC和MyBatis中配置和管理这些数据源就成为了一个关键问题。"springmvc_mybatis_多数据源"这个项目就是针对这种情况提供的一种解决方案。 首先,我们来看SpringMVC如何...

    spring+spring mvc+mybatis+easyui整合demo

    这个"spring+spring mvc+mybatis+easyui整合demo"项目是针对这些技术的一个集成示例,旨在帮助开发者了解如何将它们协同工作以构建一个功能完备的Web应用程序。 首先,Spring框架作为基础,它提供了依赖注入(DI)...

    Spring3 MVC REST + JPA2 (Hibernate 3.6.1) 构建投票系统 - 2.Spring MVC REST

    通过结合 Spring MVC、REST 和 Hibernate,开发者可以高效地构建一个功能丰富的投票系统,提供易于理解和使用的 API,同时利用 ORM 技术简化数据库操作。这不仅提高了开发效率,也便于系统的扩展和维护。

    web网上书城完整项目附数据库

    总的来说,这个项目涵盖了Java Web开发的多个关键点:数据库设计与管理、前端页面构建、后端服务开发、MVC架构应用、用户认证与安全措施,以及项目管理和部署等。对于初学者和开发者来说,这是一个极好的实践案例,...

    spring mvc + spring + hibernate 全注解整合开发视频教程 13

    Spring MVC是Spring框架的一个模块,专门用于构建Web应用程序的前端控制器。它提供了模型-视图-控制器(MVC)设计模式的实现,使得开发者能够将业务逻辑、数据展示和用户交互分离,从而提高代码的可读性和可测试性。...

    开发spring mvc所需要的jar包

    Spring MVC 是一款强大的Java Web开发框架,用于构建高效、可维护的Web应用程序。它基于Spring框架,提供了模型-视图-控制器(MVC)架构模式的实现,使得开发者可以更轻松地处理HTTP请求、数据绑定、视图渲染等任务...

    struts_spring_mybatis.web.rar

    **Spring3** 是一个全面的Java企业级应用开发框架,它涵盖了从持久层到表现层的多个层面。Spring的核心是IoC(Inversion of Control,控制反转)和AOP(Aspect-Oriented Programming,面向切面编程)。IoC通过容器...

    Spring MVC+OpenJPA框架

    总之,Spring MVC和OpenJPA的结合使用,为Java Web应用提供了一个高效、灵活的解决方案。Spring MVC提供了强大的MVC架构,而OpenJPA则简化了数据持久化。两者协同工作,使得开发者可以更专注于业务逻辑,而不是底层...

    Java 开源博客系统 spring mvc、 hibernate、 spring、 maven整合开发

    Spring MVC是Spring框架的一个模块,专门用于处理Web应用的Model-View-Controller(MVC)架构。它提供了请求分发、视图解析、数据绑定等功能,使开发者能够更专注于业务逻辑,而不是底层的HTTP处理。Spring MVC通过...

    spring3.2+hibernate4.1 MVC.zip

    通过分析和学习这个Demo,读者可以深入理解Spring 3.2和Hibernate 4.1的集成方式,以及如何利用MVC模式设计和实现一个Web应用。这个Demo不仅适用于初学者,也为有经验的开发者提供了一种回顾旧版本技术的机会,帮助...

    综合 spring mvc,spring,hibernate,bootstrap 开发图书管理系统

    《综合 Spring MVC、Spring、Hibernate、Bootstrap 开发图书管理系统》是一个基于Java技术栈的Web应用程序,旨在实现对图书信息的高效管理和用户友好的界面展示。这个项目融合了多个关键的技术框架,下面将逐一介绍...

    开发者突击:Java Web主流框架整合开发:J2EE+Struts+Hibernate+Spring 部分例子源代码 及数据库

    Struts2Test很可能是一个用于演示Struts2特性的测试项目,可能包含Action类、视图页面以及与之关联的业务逻辑和数据库操作。通过阅读和运行这些源代码,开发者可以深入理解每个框架的工作原理,以及它们如何协同工作...

    基于Java web +spring 销售培训考评系统(源码+数据库).zip

    本项目是一个基于Java Web和Spring框架的销售培训考评系统,提供了完整的源码和配套数据库,适用于学习和毕业设计。这个系统的设计和实现涵盖了许多核心的Java Web开发技术,以及Spring框架的高级应用,下面将详细...

    spring mvc 事务配置+异常处理

    Spring MVC 是一个基于Java的轻量级Web应用框架,它为构建模型-视图-控制器(MVC)架构的应用程序提供了强大的支持。在Spring MVC中,事务管理是保证数据一致性和完整性的关键部分,而异常处理则有助于确保系统在...

    Spring MVC 4.3.14 + Mybatis 3.4.2 + Mysql框架实例

    Spring MVC是Spring框架的一个模块,主要负责处理Web应用中的请求和响应。4.3.14版本是Spring MVC的一个稳定版本,提供了许多改进和增强的功能: 1. **依赖注入(Dependency Injection)**:Spring MVC的核心特性之...

Global site tag (gtag.js) - Google Analytics