Meavn多Module搭建Springmvc + MyBatis + Druid 以及项目热部署

1493212884

IDE:idea + meavn

框架:Spring + Springmvc + MyBatis + Druid

如何new project new module 就此省略

演示项目暂时new 了这几个module,分别的packaging打包类型为

apeweb-bean(jar)

apeweb-core(jar)

apeweb-mybatis(jar)

apeweb-service(jar)

apeweb-web(war)

apeweb(pom)

其中,父模块必须以pom打包类型

然后是添加Spring mybatis druid相关依赖 <dependency> <groupId>org.springframework</groupId> <artifactId>spring-test</artifactId> <version>${spring.version}</version> <scope>test</scope> </dependency> <dependency> <groupId>junit</groupId> <artifactId>junit</artifactId> <version>4.12</version> <scope>test</scope> </dependency>

<!-- connection pool -->
<dependency>
    <groupId>org.apache.tomcat</groupId>
    <artifactId>tomcat-jdbc</artifactId>
    <version>${tomcat-jdbc.version}</version>
    <scope>runtime</scope>
</dependency>

<!-- spring start -->
<dependency>
    <groupId>org.springframework</groupId>
    <artifactId>spring-aop</artifactId>
    <version>${spring.version}</version>
</dependency>
<dependency>
    <groupId>org.springframework</groupId>
    <artifactId>spring-aspects</artifactId>
    <version>${spring.version}</version>
</dependency>
<dependency>
    <groupId>org.springframework</groupId>
    <artifactId>spring-beans</artifactId>
    <version>${spring.version}</version>
</dependency>
<dependency>
    <groupId>org.springframework</groupId>
    <artifactId>spring-context</artifactId>
    <version>${spring.version}</version>
</dependency>
<dependency>
    <groupId>org.springframework</groupId>
    <artifactId>spring-context-support</artifactId>
    <version>${spring.version}</version>
</dependency>
<dependency>
    <groupId>org.springframework</groupId>
    <artifactId>spring-core</artifactId>
    <version>${spring.version}</version>
</dependency>
<dependency>
    <groupId>org.springframework</groupId>
    <artifactId>spring-dao</artifactId>
    <version>2.0.8</version>
</dependency>
<dependency>
    <groupId>org.springframework</groupId>
    <artifactId>spring-expression</artifactId>
    <version>${spring.version}</version>
</dependency>
<dependency>
    <groupId>org.springframework</groupId>
    <artifactId>spring-jdbc</artifactId>
    <version>${spring.version}</version>
</dependency>
<dependency>
    <groupId>org.springframework</groupId>
    <artifactId>spring-mock</artifactId>
    <version>2.0.8</version>
</dependency>
<dependency>
    <groupId>org.springframework</groupId>
    <artifactId>spring-orm</artifactId>
    <version>${spring.version}</version>
</dependency>
<dependency>
    <groupId>org.springframework</groupId>
    <artifactId>spring-test</artifactId>
    <version>${spring.version}</version>
</dependency>
<dependency>
    <groupId>org.springframework</groupId>
    <artifactId>spring-tx</artifactId>
    <version>${spring.version}</version>
</dependency>
<dependency>
    <groupId>org.springframework</groupId>
    <artifactId>spring-web</artifactId>
    <version>${spring.version}</version>
</dependency>
<dependency>
    <groupId>org.springframework</groupId>
    <artifactId>spring-webmvc</artifactId>
    <version>${spring.version}</version>
</dependency>
<!-- spring end -->


<dependency>
    <groupId>com.alibaba</groupId>
    <artifactId>druid</artifactId>
    <version>1.0.9</version>
</dependency>
<dependency>
    <groupId>mysql</groupId>
    <artifactId>mysql-connector-java</artifactId>
    <version>${mysql-connector-java.version}</version>
</dependency>

<!-- mybatis start -->
<dependency>
    <groupId>org.mybatis</groupId>
    <artifactId>mybatis</artifactId>
    <version>3.2.1</version>
</dependency>
<dependency>
    <groupId>org.mybatis</groupId>
    <artifactId>mybatis-spring</artifactId>
    <version>1.2.0</version>
</dependency>
<!-- mybatis end -->

spring的配置

<?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:aop=”http://www.springframework.org/schema/aop
xmlns:context=”http://www.springframework.org/schema/context
xmlns:tx=”http://www.springframework.org/schema/tx
xsi:schemaLocation=”http://www.springframework.org/schema/beans
http://www.springframework.org/schema/beans/spring-beans.xsd
http://www.springframework.org/schema/aop
http://www.springframework.org/schema/aop/spring-aop.xsd
http://www.springframework.org/schema/context
http://www.springframework.org/schema/context/spring-context.xsd
http://www.springframework.org/schema/tx
http://www.springframework.org/schema/tx/spring-tx.xsd
“>

<!-- 启用注解 -->
<context:annotation-config />


<!-- 启动组件扫描,排除@Controller组件,该组件由SpringMVC配置文件扫描 -->
<context:component-scan base-package="com.ape.*">
    <context:exclude-filter type="annotation"
        expression="org.springframework.stereotype.Controller" />
</context:component-scan>
<context:component-scan base-package="com" />

</beans>
mybatis的配置
<?xml version=”1.0” encoding=”UTF-8”?>
<beans xmlns:xsi=”http://www.w3.org/2001/XMLSchema-instance
xmlns:aop=”http://www.springframework.org/schema/aop
xmlns:tx=”http://www.springframework.org/schema/tx
xmlns=”http://www.springframework.org/schema/beans
xsi:schemaLocation=”
http://www.springframework.org/schema/beans
http://www.springframework.org/schema/beans/spring-beans.xsd
http://www.springframework.org/schema/aop
http://www.springframework.org/schema/aop/spring-aop.xsd
http://www.springframework.org/schema/tx
http://www.springframework.org/schema/tx/spring-tx.xsd
“>

<bean name="transactionManager" class="org.springframework.jdbc.datasource.DataSourceTransactionManager">
    <property name="dataSource" ref="dataSource"></property>
</bean>

<bean id="propertyConfigurer" class="org.springframework.beans.factory.config.PropertyPlaceholderConfigurer">
    <property name="locations">
        <list>
            <value>classpath:dbconfig.properties</value>
        </list>
    </property>
</bean>

<!-- 阿里 druid数据库连接池 -->
<bean id="dataSource" class="com.alibaba.druid.pool.DruidDataSource" destroy-method="close">
    <!-- 数据库基本信息配置 -->
    <property name="url" value="${url}"/>
    <property name="username" value="${username}"/>
    <property name="password" value="${password}"/>
    <property name="driverClassName" value="${driverClassName}"/>
    <property name="filters" value="${filters}"/>
    <!-- 最大并发连接数 -->
    <property name="maxActive" value="${maxActive}"/>
    <!-- 初始化连接数量 -->
    <property name="initialSize" value="${initialSize}"/>
    <!-- 配置获取连接等待超时的时间 -->
    <property name="maxWait" value="${maxWait}"/>
    <!-- 最小空闲连接数 -->
    <property name="minIdle" value="${minIdle}"/>
    <!-- 配置间隔多久才进行一次检测,检测需要关闭的空闲连接,单位是毫秒 -->
    <property name="timeBetweenEvictionRunsMillis" value="${timeBetweenEvictionRunsMillis}"/>
    <!-- 配置一个连接在池中最小生存的时间,单位是毫秒 -->
    <property name="minEvictableIdleTimeMillis" value="${minEvictableIdleTimeMillis}"/>
    <property name="validationQuery" value="${validationQuery}"/>
    <property name="testWhileIdle" value="${testWhileIdle}"/>
    <property name="testOnBorrow" value="${testOnBorrow}"/>
    <property name="testOnReturn" value="${testOnReturn}"/>
    <property name="maxOpenPreparedStatements" value="${maxOpenPreparedStatements}"/>
    <!-- 打开removeAbandoned功能 -->
    <property name="removeAbandoned" value="${removeAbandoned}"/>
    <!-- 1800秒,也就是30分钟 -->
    <property name="removeAbandonedTimeout" value="${removeAbandonedTimeout}"/>
    <!-- 关闭abanded连接时输出错误日志 -->
    <property name="logAbandoned" value="${logAbandoned}"/>
</bean>

<tx:advice id="txAdvice" transaction-manager="transactionManager">
    <tx:attributes>
        <tx:method name="delete*" propagation="REQUIRED" read-only="false"
                   rollback-for="java.lang.Exception"/>
        <tx:method name="insert*" propagation="REQUIRED" read-only="false"
                   rollback-for="java.lang.Exception"/>
        <tx:method name="update*" propagation="REQUIRED" read-only="false"
                   rollback-for="java.lang.Exception"/>
        <tx:method name="save*" propagation="REQUIRED" read-only="false"
                   rollback-for="java.lang.Exception"/>
    </tx:attributes>
</tx:advice>

<aop:aspectj-autoproxy proxy-target-class="true"/>

<!-- 事物处理 -->
<aop:config>
    <aop:pointcut id="tx" expression="execution(* com.ape.service..*(..))"/>
    <aop:advisor pointcut-ref="tx" advice-ref="txAdvice"/>
</aop:config>

<!-- 配置mybatis -->
<bean id="sqlSessionFactory" class="org.mybatis.spring.SqlSessionFactoryBean">
    <property name="dataSource" ref="dataSource"/>
    <property name="configLocation" value="classpath:mybatis/mybatis-config.xml"></property>
    <!-- mapper扫描 -->
    <property name="mapperLocations" value="classpath:mapper/*/*.xml"></property>
</bean>

<bean id="sqlSessionTemplate" class="org.mybatis.spring.SqlSessionTemplate" >
    <constructor-arg ref="sqlSessionFactory"/>
</bean>

</beans>
springmvc的配置
<?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:mvc=”http://www.springframework.org/schema/mvc
xmlns:context=”http://www.springframework.org/schema/context
xsi:schemaLocation=”http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd
http://www.springframework.org/schema/mvc http://www.springframework.org/schema/mvc/spring-mvc.xsd
http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context.xsd">

<mvc:annotation-driven/>    
<mvc:default-servlet-handler/>

<context:component-scan base-package="com" />

<!-- 对静态资源文件的访问  restful-->     
<!--<mvc:resources mapping="/admin/**" location="/,/admin/" />-->
<!--<mvc:resources mapping="/static/**" location="/,/static/" />-->
<!--<mvc:resources mapping="/plugins/**" location="/,/plugins/" />-->
<!--<mvc:resources mapping="/uploadFiles/**" location="/,/uploadFiles/" /> -->

<!-- 配置SpringMVC的视图解析器 -->
<bean class="org.springframework.web.servlet.view.InternalResourceViewResolver">
    <property name="prefix" value="/WEB-INF/jsp/"/>
    <property name="suffix" value=".jsp"/>
</bean>

<!--<bean id="exceptionResolver" class="com.fh.resolver.MyExceptionResolver"></bean>-->
<!-- 上传拦截,如最大上传值及最小上传值 -->
  <bean id="multipartResolver"   class="org.springframework.web.multipart.commons.CommonsMultipartResolver" >
      <property name="maxUploadSize">
          <value>104857600</value>
       </property>
        <property name="maxInMemorySize">
            <value>4096</value>
        </property>
         <property name="defaultEncoding">
            <value>utf-8</value>
        </property>
</bean>

</beans>
好吧,其实跟普通的ssm搭建没什么区别,但是需要注意的是添加module依赖问题

还有就是到 File -> Project Structure -> Project Settings -> Facets 添加一下Web路径

搭建遇到的小问题
Java.lang.IllegalArgumentException: Mapped Statements collection does not contain value for PersonMapper.listAll
报错原因:没有成功引入mybatis 模块的依赖,导致找不到PersonMapper报异常

当时的pom.xml已经添加了apeweb-mybatis依赖

<dependency>
     <groupId>com.ape</groupId>
     <artifactId>apeweb-mybatis</artifactId>
     <version>1.0-SNAPSHOT</version>
 </dependency>

解决办法: File -> Project Structure -> Project Settings -> Artifacts 添加配置
idea简单的两步实现热部署
何为热部署,就是修改java代码 jsp页面自动编译,无需重新部署项目

上图,修改 Upldate 跟 frame deactivation 为 Update classes and resources

然后以Debug模式运行项目,一定要Debug模式!!!