常用配置记录

SpringMVC配置

配置数据源

  <!-- 引入外部数据源配置信息 -->
    <bean class="org.springframework.beans.factory.config.PropertyPlaceholderConfigurer">
        <property name="locations">
            <value>classpath:${env.active}/jdbc.properties</value>
        </property>
        <property name="ignoreUnresolvablePlaceholders" value="true" />
    </bean>

    <!-- 配置数据源 -->
    <bean id="dataSource" class="org.springframework.jdbc.datasource.DriverManagerDataSource">
        <property name="driverClassName" value="${jdbc.driver}"></property>
        <property name="url" value="${jdbc.url}"></property>
        <property name="username" value="${jdbc.username}"></property>
        <property name="password" value="${jdbc.password}"></property>
    </bean>

    <!-- 使用JNDI -->
    <!-- <bean id="dataSource" class="org.springframework.jndi.JndiObjectFactoryBean"> -->
    <!-- <property name="jndiName"> -->
    <!-- <value>crm</value> -->
    <!-- </property> -->
    <!-- </bean> -->

    <!-- 配置Session工厂 -->
    <bean id="sqlSessionFactory" class="org.mybatis.spring.SqlSessionFactoryBean">
        <property name="dataSource" ref="dataSource"></property>
        <property name="configLocation" value="classpath:mybatis.cfg.xml"/>
        <property name="mapperLocations" value="classpath*:com/*/*/sql/*.xml"/>
    </bean>
    <bean id="sqlSession" class="org.mybatis.spring.SqlSessionTemplate">
        <constructor-arg index="0" ref="sqlSessionFactory"/>
    </bean>
    <bean id="basicDao" class="com.jdf.core.dao.BasicDaoImpl">
        <property name="sqlSessionTemplate" ref="sqlSession"/>
    </bean>

    <!-- 配置事务管理器 -->
    <bean id="txManager" class="org.springframework.jdbc.datasource.DataSourceTransactionManager">
        <property name="dataSource" ref="dataSource"></property>
    </bean>

    <!-- 定义个通知,指定事务管理器 -->
    <tx:advice id="txAdvice" transaction-manager="txManager">
        <tx:attributes>
            <tx:method name="delete*" propagation="REQUIRED" rollback-for="Exception"/>
            <tx:method name="save*" propagation="REQUIRED" rollback-for="Exception"/>
            <tx:method name="insert*" propagation="REQUIRED" rollback-for="Exception"/>
            <tx:method name="update*" propagation="REQUIRED" rollback-for="Exception"/>
            <tx:method name="tx*" propagation="REQUIRED" rollback-for="Exception"/>
            <tx:method name="load*" propagation="SUPPORTS" read-only="true"/>
            <tx:method name="find*" propagation="SUPPORTS" read-only="true"/>
            <tx:method name="search*" propagation="SUPPORTS" read-only="true"/>
            <tx:method name="select*" propagation="SUPPORTS" read-only="true"/>
            <tx:method name="get*" propagation="SUPPORTS" read-only="true"/>
        </tx:attributes>
    </tx:advice>
    <aop:config>
        <!-- 配置一个切入点 -->
        <aop:pointcut id="devServiceMethods" expression="execution(* com.swxc.*.service.*.*(..))"/>
        <aop:advisor advice-ref="txAdvice" pointcut-ref="devServiceMethods"/>
    </aop:config>
</beans>

配置DispatcherServlet

servlet>
    <servlet-name>spring</servlet-name>
    <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
    <!-- 可以自定义servlet.xml配置文件的位置和名称,默认为WEB-INF目录下,名称为[<servlet-name>]-servlet.xml,如spring-servlet.xml
    <init-param>
        <param-name>contextConfigLocation</param-name>
        <param-value>/WEB-INF/spring-servlet.xml</param-value>&nbsp; 默认
    </init-param>
    -->
    <load-on-startup>1</load-on-startup>
</servlet>

<servlet-mapping>
    <servlet-name>spring</servlet-name>
    <url-pattern>*.do</url-pattern>
</servlet-mapping>
<!– 扫描controller处理类.为了创建对象. –>
<context:component-scan base-package=”cn.bdqn.controller”></context:component-scan>
<!– 支持映射器的注解使用. –>
<mvc:annotation-driven></mvc:annotation-driven>

<!– 配置视图解析器 –>
<bean
class=”org.springframework.web.servlet.view.InternalResourceViewResolver”>
<property name =”prefix” value=”/” />
<property name = “suffix” value=”.jsp” />
</bean>

<!– 静态资源的配置: 可直接设置其WEB-INF外的资源访问. 不支持内部资源访问.因为此配置将进行的是重定向的形式进行资源访问的.–>
<mvc:resources location=”/resource/js/” mapping=”/resource/js/**”></mvc:resources>
<mvc:resources location=”/resource/css/” mapping=”/resource/css/**”></mvc:resources>
<mvc:resources location=”/resource/img/” mapping=”/resource/img/**”></mvc:resources>

<!– 拦截器配置 –>
<mvc:interceptors>
<mvc:interceptor>
<mvc:mapping path=”/**”/>
<bean class=”cn.bdqn.utils.LoginInterceptor”></bean>
</mvc:interceptor>
</mvc:interceptors>

<!– 配置错误处理器: –>
<bean id=”handlerExceptionResolver” class=”cn.bdqn.utils.MyExceptionResolver”></bean>

<!– 配置上传解析器: –>
<bean id=”multipartResolver” class=”org.springframework.web.multipart.commons.CommonsMultipartResolver”>
<!– 配置上传限制大小: 2M–>
<property name=”maxUploadSize”>
<value>2097152</value>
</property>
</bean>
</beans>

Mybatis配置

延迟加载:

<settings>
		<setting name="lazyLoadingEnabled" value="true"/>
		<setting name="aggressiveLazyLoading" value="false"/>
                <setting name="lazyLoadTriggerMethods" value="true"/> 
        </settings>

aggressiveLazyLoading:当该参数设置为true时,对任意延迟属性的调用会使带有延迟加载属性的对象完整加载,反之,每种属性都将按需加载。当我们从数据库中查询到数据后会给实体类中关联对象赋值,会调用关联对象属性的setter方法,这会触发上述规则,导致本该延迟加载的属性直接加载,为了避免这种情况,需要将其设置为false。

lazyLoadingEnabled:开启全局延迟加载,不用手动在单个关联中配置。

lazyLoadTriggerMethods:当调用配置中的方法时,加载全部的延迟加载数据。默认值是“equals,clone,hashCode,toString”。

延迟加载有时候会取不到值的问题:mybatis延迟加载时通过动态代理实现的,当调用配置为延迟加载的属性方法时,动态代理的操作会被触发,这些额外的操作就是通mybatis的sqlSession去执行嵌套的SQL的。由于在和某些框架集成时,sqlSession的生命周期交给了框架来管理,因此当对象超出sqlsession生命周期调用时,会由于链接关闭等问题而抛出异常。在和spring集成时,要确保只能在Service层调用延迟加载的属性。当结果从service层返回至Controller层时,如果获取延迟加载的属性值,会因sqlsession已经关闭而抛出异常。

事务回滚

spring-mvc.xml中配置了

<!-- 自动扫描controller包下的所有类,使其认为spring mvc的控制器 -->
    <context:component-scan base-package="com.ms.controller" />

开启了自动扫描,发现service层并不能回滚。
在spring-mvc.xml添加

<context:component-scan base-package="com.njzaizao"> 
        <context:exclude-filter type="annotation" expression="org.springframework.stereotype.Service" /> 
    </context:component-scan> 

此为:扫描所有的controller 但是不扫描service

这样service层就能自动开启事务了

但是这样有个问题,service层不能使用try catch

如果必须在service层捕捉异常的话可使用 注解 @Transactional

maven生命周期

idea工具maven projects里面有9种生命周期,生命周期是包含在一个项目构建中的一系列有序的阶段。clean、validate、compile、test、package、verify、install、build、site和deploy。
最常用的两种打包方法:

  1. clean,package(如果报错,很可能就是jar依赖的问题)
  2. clean,install

clean

我们在使用maven的构建项目会产生一个target文件,但我们修改了代码后就需要使用clean清楚target,重新生成target。

compile

编译源码,编译生成class文件,编译命令,只编译选定的目标,不管之前是否已经编译过,会在你的项目路径下生成一个target目录,在该目录中包含一个classes文件夹,里面全是生成的class文件及字节码文件。

package

打包,将工程文件打包为指定的格式,例如JAR,WAR等。这个命令会在你的项目路径下一个target目录,并且拥有compile命令的功能进行编译,同时会在target目录下生成项目的jar/war文件。如果a项目依赖于b项目,打包b项目时,只会打包到b项目下target下,编译a项目时就会报错,因为找不到所依赖的b项目,说明a项目在本地仓库是没有找到它所依赖的b项目,这是可以用install命令。

install

安装至本地仓库,将包安装至本地仓库,以让其它项目依赖。该命令包含了package命令功能,不但会在项目路径下生成class文件和jar包,同时会在你的本地maven仓库生成jar文件,供其他项目使用。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值