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

来源:互联网 发布:mac黑苹果安装教程 编辑:程序博客网 时间:2024/06/04 18:44

这几天一直在搭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类里做了自动注入,有点多此一举,大概是抱着有备无患的想法。我是新手,勿喷,谢谢。


0 0
原创粉丝点击