您的位置:首页 > 编程语言 > Java开发

maven 整合struts2,mybaitis,spring使用drudi数据源

2014-08-13 11:10 323 查看
这几天一直在搭struts2,mybatis,spring的整合框架,作为一个新手,实在是不容易,看了很多文档和资料,期间出了很多问题,不过最后总算是搭出来了。记录下来,作为以后的参考,以及现在的温习。

1.首先,我用maven新建了一个webapp项目(纯粹的maven web项目),pom.xml中jar文件配置如下:

<dependencies>

<dependency>

<groupId>org.springframework</groupId>

<artifactId>spring-core</artifactId>

<version>3.2.6.RELEASE</version>

</dependency>

<dependency>

<groupId>org.springframework</groupId>

<artifactId>spring-test</artifactId>

<version>3.2.0.RELEASE</version>

</dependency>

<dependency>

<groupId>org.springframework</groupId>

<artifactId>spring-beans</artifactId>

<version>3.2.6.RELEASE</version>

</dependency>

<dependency>

<groupId>org.springframework</groupId>

<artifactId>spring-jdbc</artifactId>

<version>3.2.6.RELEASE</version>

</dependency>

<dependency>

<groupId>org.mybatis</groupId>

<artifactId>mybatis</artifactId>

<version>3.2.3</version>

</dependency>

<dependency>

<groupId>org.mybatis</groupId>

<artifactId>mybatis-spring</artifactId>

<version>1.2.1</version>

</dependency>

<dependency>

<groupId>postgresql</groupId>

<artifactId>postgresql</artifactId>

<version> 8.2-504.jdbc3</version>

</dependency>

<dependency>

<groupId>org.apache.struts</groupId>

<artifactId>struts2-core</artifactId>

<version>2.3.16</version>

</dependency>

<dependency>

<groupId>org.apache.struts</groupId>

<artifactId>struts2-spring-plugin</artifactId>

<version>2.3.16</version>

</dependency>

<dependency>

<groupId>log4j</groupId>

<artifactId>log4j</artifactId>

<version>1.2.16</version>

</dependency>

<dependency>

<groupId>org.springframework</groupId>

<artifactId>spring-beans</artifactId>

<version>3.2.6.RELEASE</version>

</dependency>

<dependency>

<groupId>org.springframework</groupId>

<artifactId>spring-context</artifactId>

<version>3.2.6.RELEASE</version>

</dependency>

<dependency>

<groupId>org.springframework</groupId>

<artifactId>spring-web</artifactId>

<version>3.2.6.RELEASE</version>

</dependency>

<dependency>

<groupId>org.apache.geronimo.specs</groupId>

<artifactId>geronimo-servlet_2.4_spec</artifactId>

<version>1.1.1</version>

</dependency>

<dependency>

<groupId>com.alibaba</groupId>

<artifactId>fastjson</artifactId>

<version>1.1.26</version>

</dependency>

<dependency>

<groupId>com.alibaba</groupId>

<artifactId>druid</artifactId>

<version>0.2.9</version>

</dependency>

<dependency>

<groupId>org.apache.tomcat</groupId>

<artifactId>dbcp</artifactId>

<version>6.0.41</version>

</dependency>

<dependency>

<groupId>junit</groupId>

<artifactId>junit</artifactId>

<version>4.11</version>

<scope>test</scope>

</dependency>

在网上看到别人整合struts2和spring的时候说有jar包冲突的问题,这里我没有遇到。
2.我用mybatis-generator工具自动生成了bean.mapper.和mapping三个文件。熟悉mybatis的都熟悉这三者之间的映射关系,这里就不解释了。工程目录如下:

3第三点也是最重要的一点,就是spring的配置,这里我们把spring配置和mybatis的配置放在一个文件里面了,applicationContext-core.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:p="http://www.springframework.org/schema/p"

xmlns:context="http://www.springframework.org/schema/context"

xmlns:jee="http://www.springframework.org/schema/jee" xmlns:aop="http://www.springframework.org/schema/aop"

xmlns:tx="http://www.springframework.org/schema/tx"

xsi:schemaLocation="

http://www.springframework.org/schema/beans

http://www.springframework.org/schema/beans/spring-beans-2.5.xsd

http://www.springframework.org/schema/context

http://www.springframework.org/schema/context/spring-context-2.5.xsd

http://www.springframework.org/schema/jee

http://www.springframework.org/schema/jee/spring-jee-2.5.xsd

http://www.springframework.org/schema/tx

http://www.springframework.org/schema/tx/spring-tx-2.5.xsd

http://www.springframework.org/schema/aop

http://www.springframework.org/schema/aop/spring-aop-3.0.xsd">


<!--jndi配置数据源-->

<!-- <bean id="dataSource" class="org.springframework.jndi.JndiObjectFactoryBean">

<property name="jndiName"> <value>java:comp/env/jdbc/flowDB</value> </property>

</bean> <bean id="jdbcTemplate" class="org.springframework.jdbc.core.JdbcTemplate">

<property name="dataSource"> <ref bean="dataSource" /> </property> </bean> -->


<!--引入属性文件-->

<context:property-placeholder location="classpath:config.properties" />

<!-- 配置数据源 -->

<bean name="dataSource" class="com.alibaba.druid.pool.DruidDataSource"

init-method="init" destroy-method="close">

<property name="url" value="${jdbc_url}" />

<property name="username" value="${jdbc_username}" />

<property name="password" value="${jdbc_password}" />

<!-- 初始化连接大小 -->

<property name="initialSize" value="0" />

<!-- 连接池最大使用连接数量 -->

<property name="maxActive" value="20" />

<!-- 连接池最大空闲 -->

<property name="maxIdle" value="20" />

<!-- 连接池最小空闲 -->

<property name="minIdle" value="0" />

<!-- 获取连接最大等待时间 -->

<property name="maxWait" value="60000" />

<property name="poolPreparedStatements" value="true" />

<property name="maxPoolPreparedStatementPerConnectionSize"

value="33" />

<property name="validationQuery" value="${validationQuery}" />

<property name="testOnBorrow" value="false" />

<property name="testOnReturn" value="false" />

<property name="testWhileIdle" value="true" />

<!-- 配置间隔多久才进行一次检测,检测需要关闭的空闲连接,单位是毫秒 -->

<property name="timeBetweenEvictionRunsMillis" value="60000" />

<!-- 配置一个连接在池中最小生存的时间,单位是毫秒 -->

<property name="minEvictableIdleTimeMillis" value="25200000" />

<!-- 打开removeAbandoned功能 -->

<property name="removeAbandoned" value="true" />

<!-- 1800秒,也就是30分钟 -->

<property name="removeAbandonedTimeout" value="1800" />

<!-- 关闭abanded连接时输出错误日志 -->

<property name="logAbandoned" value="true" />

<!-- 监控数据库 -->

<property name="filters" value="stat" />

<!-- <property name="filters" value="mergeStat" /> -->

</bean>

<!-- 数据连接管理 -->

<bean id="transactionManager"

class="org.springframework.jdbc.datasource.DataSourceTransactionManager">

<property name="dataSource" ref="dataSource" />

</bean>

<!-- myBatis文件 -->

<bean id="sqlSessionFactory" class="org.mybatis.spring.SqlSessionFactoryBean">

<property name="configLocation" value="classpath:myBatis-config.xml" />

<property name="dataSource" ref="dataSource" />

</bean>

<!-- 拦截器:配置事务的传播特性 -->

<bean id="baseTransactionProxy" class="org.springframework.transaction.interceptor.TransactionProxyFactoryBean" abstract="true">

<property name="transactionManager" ref="transactionManager" />

<property name="transactionAttributes">

<props>

<prop key="add*">PROPAGATION_REQUIRED</prop>

<prop key="edit*">PROPAGATION_REQUIRED</prop>

<prop key="remove*">PROPAGATION_REQUIRED</prop>

<prop key="insert*">PROPAGATION_REQUIRED</prop>

<prop key="update*">PROPAGATION_REQUIRED</prop>

<prop key="modify*">PROPAGATION_REQUIRED</prop>

<prop key="del*">PROPAGATION_REQUIRED</prop>

<prop key="*">readOnly</prop>

</props>

</property>

</bean>

<bean id="flowInstallTargetMapper" class="org.mybatis.spring.mapper.MapperFactoryBean">

<!-- 这里是接口,不是接口实现类了 -->

<property name="mapperInterface"

value="com.testStruts.mapper.FlowInstallTargetMapper" />

<property name="sqlSessionFactory" ref="sqlSessionFactory" />

</bean>

<bean id="installServiceImpl" class="com.testStruts.service.InstallServiceImpl">

<property name="flowInstallTargetMapper" ref="flowInstallTargetMapper" />

</bean>

<!-- 为IVillageArticle接口配置事务拦截器,baseTransactionProxy是事务拦截器,在Controller中获取这个对象 。这里不能缺少,在springmvc中是没有这个配置的-->

<bean id="installService" parent="baseTransactionProxy">

<!-- 设置target,也就是IVillageArticle的实现类 -->

<property name="target" ref="installServiceImpl"/>

</bean>

<bean id="installAction" class="com.testStruts.action.InstallAction">

<property name="installService" ref="installService" />

</bean>

</beans>

4.写我们的Service和service实现类

package com.testStruts.service;

import java.util.Date;

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

import com.testStruts.bean.FlowInstallTarget;

import com.testStruts.mapper.FlowInstallTargetMapper;

public class InstallServiceImpl implements InstallService {

private FlowInstallTargetMapper flowInstallTargetMapper;

public FlowInstallTargetMapper getFlowInstallTargetMapper() {

return flowInstallTargetMapper;

}

@Autowired

public void setFlowInstallTargetMapper(

FlowInstallTargetMapper flowInstallTargetMapper) {

this.flowInstallTargetMapper = flowInstallTargetMapper;

}

public FlowInstallTarget selectByPrimaryKey(Date date) {

return flowInstallTargetMapper.selectByPrimaryKey(date);

}

}

service的接口从中抽出即可。

5.再然后是Action类

package com.testStruts.action;

import java.util.Calendar;

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

import org.springframework.web.bind.annotation.ResponseBody;

import com.alibaba.fastjson.JSON;

import com.opensymphony.xwork2.ActionSupport;

import com.sun.servicetag.Installer;

import com.testStruts.service.InstallService;

public class InstallAction extends ActionSupport {

private static final long serialVersionUID = -4621492739125099197L;

private InstallService installService;

@Override

public String execute() throws Exception {

Calendar date = Calendar.getInstance();

date.set(Calendar.DAY_OF_MONTH, 3);

date.set(Calendar.HOUR_OF_DAY, 0);

date.set(Calendar.MINUTE, 0);

date.set(Calendar.SECOND, 0);

System.out.println(date.getTime());

System.out.println(JSON.toJSONString(installService.selectByPrimaryKey(date.getTime())));

return SUCCESS;

}

public InstallService getInstallService() {

return installService;

}

@Autowired

public void setInstallService(InstallService installService) {

this.installService = installService;

}

}

6.mybatis.xml和struts2.xml配置文件

mybaitis.xml

<?xml version="1.0" encoding="UTF-8" ?>

<!DOCTYPE configuration PUBLIC "-//mybatis.org//DTD Config 3.0//EN" "http://mybatis.org/dtd/mybatis-3-config.dtd">

<configuration>

<!-- 指定映射器路径 -->

<mappers>

<mapper resource="com/testStruts/mapping/FlowInstallTargetMapper.xml"/>

<mapper resource="com/testStruts/mapping/FlowSellTargetMapper.xml"/>

</mappers>

</configuration>

struts2.xml

<?xml version="1.0" encoding="UTF-8" ?>

<!DOCTYPE struts PUBLIC

"-//Apache Software Foundation//DTD Struts Configuration 2.0//EN"

"http://struts.apache.org/dtds/struts-2.0.dtd">

<struts>

<package name="default" extends="struts-default">

<action name="installAction" class="com.testStruts.action.InstallAction">

<result name="success">success.jsp</result>

<result name="error">error.jsp</result>

</action>

</package>

</struts>

comfig.properties postgres数据库

hibernate.dialect=org.hibernate.dialect.PostgreSQLDialect

driverClassName=org.postgresql.Driver

validationQuery=SELECT 1

jdbc_url=jdbc:postgresql://*.*.*.*:5432/flowlog?characterEncoding=UTF8

jdbc_username=postgres

jdbc_password=

至此我们的整合就完成了,在spring的配置文件里面我对所有的bean做了手工配置,在class类里做了自动注入,有点多此一举,大概是抱着有备无患的想法。我是新手,勿喷,谢谢。


内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: