spring mvc + spring + mybatis 配置
1:spring-config.xml 封装sping配置文件 便于读取项目中的配置文件
<?xml version="1.0" encoding="UTF-8"?> <beans xmlns="http://www.springframework.org/schema/beans" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation=" http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-4.1.xsd"> <!--读取配置文件--> <bean id="configProperty" class="org.springframework.beans.factory.config.PropertyPlaceholderConfigurer"> <property name="locations"> <array> <value>classpath:/config/properties/config-env.properties</value> <value>classpath:/config/properties/db_config.properties</value> <value>classpath:/config/properties/config.properties</value> <value>classpath:/config/properties/redis_config.properties</value> </array> </property> </bean> <!--注入封装配置文件读取结果对象--> <bean id = "propertiesDto" class="com.jtws.common.model.PropertiesDTO"> </bean> </beans>
配置文件样采取key value形式
比如
not_login_url=/common/not-login
PropertiesDTO注入封装实体类 主要读取
config-env.properties 与 config.properties
@Component public class PropertiesDTO { @Value("${not_login|_url}") private String notLoginUrl ; public void setNotLoginUrl(String notLoginUrl){ this.notLoginUrl = notLoginUrl; } public String getNotLoginUrl(){ return notLoginUrl; } }
2:spring-basic.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:context="http://www.springframework.org/schema/context" xmlns:aop="http://www.springframework.org/schema/aop" xmlns:task="http://www.springframework.org/schema/task" xsi:schemaLocation=" http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-4.1.xsd http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-4.1.xsd http://www.springframework.org/schema/aop http://www.springframework.org/schema/aop/spring-aop-4.1.xsd http://www.springframework.org/schema/task http://www.springframework.org/schema/task/spring-task-4.1.xsd"> <!-- 扫描业务层service --> <context:component-scan base-package="com.jtws.*.service"/> <context:annotation-config/> <!--AOP--> <!-- 启用@AspectJ风格的切面声明 --> <aop:aspectj-autoproxy/> <bean id="myAspect" class="com.jtws.common.base.AspectService"/> <!--定时器 注解支持 @Scheduled--> <task:annotation-driven /> <!-- alibaba druid spring 监控 --> <bean id="druid-stat-interceptor" class="com.alibaba.druid.support.spring.stat.DruidStatInterceptor"/> <bean id="druid-stat-pointcut" class="org.springframework.aop.support.JdkRegexpMethodPointcut" scope="prototype"> <property name="patterns"> <list> <value>com.jtws.*.web.*</value> <value>com.jtws.*.resource.*</value> <value>com.jtws.*.service.*</value> </list> </property> </bean> <aop:config> <aop:advisor advice-ref="druid-stat-interceptor" pointcut-ref="druid-stat-pointcut"/> </aop:config> <!-- alibaba druid spring 监控 --> </beans>
3:spring-db.xml 数据库配置 读取db_config.properties文件配置
<?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:tx="http://www.springframework.org/schema/tx" xmlns:aop="http://www.springframework.org/schema/aop" xsi:schemaLocation=" http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-4.1.xsd http://www.springframework.org/schema/tx http://www.springframework.org/schema/tx/spring-tx-4.1.xsd http://www.springframework.org/schema/aop http://www.springframework.org/schema/aop/spring-aop-4.1.xsd"> <!--数据库:MySql--> <!--csp0连接池--> <!-- <bean id="dataSource_mysql" class="com.mchange.v2.c3p0.ComboPooledDataSource" destroy-method="close"> <property name="driverClass" value="${my.jdbc.driver}" /> <property name="jdbcUrl" value="${my.jdbc.url}" /> <property name="user" value="${my.jdbc.username}" /> <property name="password" value="${my.jdbc.password}" /> <property name="initialPoolSize" value="1" /> <!–连接池中保留的最小连接数。–> <property name="minPoolSize" value="0" /> <!–连接池中保留的最大连接数。Default: 15 –> <property name="maxPoolSize" value="50" /> <!–当连接池中的连接耗尽的时候c3p0一次同时获取的连接数。Default: 3 –> <property name="acquireIncrement" value="5" /> <!–最大空闲时间,1800秒内未使用则连接被丢弃。若为0则永不丢弃。Default: 0 –> <property name="maxIdleTime" value="1000" /> <property name="maxStatements" value="0" /> <property name="testConnectionOnCheckin" value="false"/> <property name="testConnectionOnCheckout" value="true"/> <property name="preferredTestQuery" value="SELECT 1"/> </bean>-->
<!--alibaba 数据源配置 有利于监控sql执行情况--> <bean id="dataSource_mysql" class="com.alibaba.druid.pool.DruidDataSource" destroy-method="close"> <!-- 数据库基本信息配置 --> <property name="url" value="${my.jdbc.url}"/> <property name="username" value="${my.jdbc.username}"/> <property name="password" value="${my.jdbc.password}"/> <property name="driverClassName" value="${my.jdbc.driver}"/> <property name="filters" value="stat"/> <!-- 最大并发连接数 --> <property name="maxActive" value="20"/> <!-- 初始化连接数量 --> <property name="initialSize" value="1"/> <!-- 配置获取连接等待超时的时间 --> <property name="maxWait" value="60000"/> <!-- 最小空闲连接数 --> <property name="minIdle" value="10"/> <!-- 配置间隔多久才进行一次检测,检测需要关闭的空闲连接,单位是毫秒 --> <property name="timeBetweenEvictionRunsMillis" value="60000"/> <!-- 配置一个连接在池中最小生存的时间,单位是毫秒 --> <property name="minEvictableIdleTimeMillis" value="300000"/> <property name="validationQuery" value="SELECT 1 FROM DUAL"/> <property name="testWhileIdle" value="true"/> <property name="testOnBorrow" value="false"/> <property name="testOnReturn" value="false"/> <property name="maxOpenPreparedStatements" value="100"/> <!-- 对于建立时间超过removeAbandonedTimeout的连接强制关闭 --> <property name="removeAbandoned" value="true"/> <!-- 1800 秒,也就是 30 分钟 --> <property name="removeAbandonedTimeout" value="1800"/> <!-- 关闭 abanded 连接时输出错误日志 --> <property name="logAbandoned" value="true"/> </bean> <!--配置事务--> <bean id="transactionManager_mysql" class="org.springframework.jdbc.datasource.DataSourceTransactionManager"> <property name="dataSource" ref="dataSource_mysql" /> </bean> <!--注解式事务,使用JDK动态代理--> <tx:annotation-driven transaction-manager="transactionManager_mysql" /> <!--session factory--> <bean id="sqlSessionFactory_mysql" class="org.mybatis.spring.SqlSessionFactoryBean"> <property name="dataSource" ref="dataSource_mysql"/> <property name="mapperLocations" value="classpath:daoMapperConfig/userMapper/*.xml"/> </bean> <!-- 配置扫描器,扫描所有的DAO --> <bean id="daoScan_mysql" class="org.mybatis.spring.mapper.MapperScannerConfigurer"> <property name="basePackage" value="com.jtws.**.dao.userDao,com.jtws.**.dao.agentDao"/> <property name="sqlSessionFactoryBeanName" value="sqlSessionFactory_mysql"/> </bean> </beans>
4:spring-redis.xml redis缓存配置 读取redis_config.properties文件配置
<?xml version="1.0" encoding="UTF-8"?> <beans xmlns="http://www.springframework.org/schema/beans" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation=" http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-4.1.xsd"> <!--JTWS-redis--> <bean id="configJedisPool" class="com.jtws.common.db.MyJedisPoolBulider" init-method="initConfig"> <property name="poolName" value="jtwsJedisPool"/> <!--服务器IP地址,默认127.0.0.1--> <property name="jedisIp" value="${jtws.config.jedis.ip}"/> <property name="jedisPort" value="${jtws.config.jedis.port}"/> <property name="jedisUserName" value="${jtws.config.jedis.userName}"/> <property name="encryptPassword" value="${jtws.config.jedis.passWord}"/> <!--启动的时候是否输出配置信息,默认是--> <property name="printJedisConfig" value="true"/> </bean> <bean id="configJedis" class="com.helper.JedisInstanceFactory"> <property name="jedisPoolBulider" ref="configJedisPool"/> </bean> <!--JTWS-redis--> <!--PRO-redis--> <bean id="proJedisPool" class="com.jtws.common.db.MyJedisPoolBulider" init-method="initConfig"> <property name="poolName" value="proJedisPool"/> <!--服务器IP地址,默认127.0.0.1--> <property name="jedisIp" value="${pro.config.jedis.ip}"/> <property name="jedisPort" value="${pro.config.jedis.port}"/> <property name="jedisUserName" value="${pro.config.jedis.userName}"/> <property name="encryptPassword" value="${pro.config.jedis.passWord}"/> <!--启动的时候是否输出配置信息,默认是--> <property name="printJedisConfig" value="true"/> </bean> <bean id="proJedis" class="com.helper.JedisInstanceFactory"> <property name="jedisPoolBulider" ref="proJedisPool"/> </bean> <!--PRO-redis--> </beans>
5:spring-thread-config.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" xsi:schemaLocation=" http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-4.1.xsd"> <!--线程池。--> <bean id="taskPoolExecutor" class="org.springframework.scheduling.concurrent.ThreadPoolTaskExecutor" destroy-method="shutdown"> <!-- 线程池维护线程的最少数量 --> <property name="corePoolSize" value="20" /> <!-- 线程池维护线程所允许的空闲时间 --> <property name="keepAliveSeconds" value="30000" /> <!-- 线程池维护线程的最大数量 --> <property name="maxPoolSize" value="200" /> <!-- 线程池所使用的缓冲队列 --> <property name="queueCapacity" value="300" /> </bean> <!--异步执行器,多出的任务开始等待 --> <bean id="simpleAsyncTaskExecutor" class="org.springframework.core.task.SimpleAsyncTaskExecutor"> <property name="daemon" value="true"/> <property name="concurrencyLimit" value="30"/> <property name="threadNamePrefix" value="simpleAsyncTaskExecutor"/> </bean> </beans>
6:servlet-context.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:context="http://www.springframework.org/schema/context" xmlns:mvc="http://www.springframework.org/schema/mvc" xsi:schemaLocation="http://www.springframework.org/schema/mvc http://www.springframework.org/schema/mvc/spring-mvc-4.1.xsd http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-4.1.xsd http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-4.1.xsd"> <!-- 组件扫描 ,只扫描controller--> <context:component-scan base-package="com.jtws.*.resource,com.jtws.*.web"/> <!-- 解决了@Controller注解的使用前提配置。并提供了:数据绑定支持,@NumberFormatannotation支持, @DateTimeFormat支持,@Valid支持,读写XML的支持(JAXB),读写JSON的支持(Jackson)--> <mvc:annotation-driven> <!-- 消息转换器 解决ResponseBody返回的消息中的中文乱码--> <mvc:message-converters register-defaults="true"> <bean class="org.springframework.http.converter.StringHttpMessageConverter"> <property name="supportedMediaTypes" value="application/json;charset=UTF-8"/> </bean> </mvc:message-converters> </mvc:annotation-driven> <!-- 对静态资源文件的访问--> <mvc:resources mapping="/images/**" location="/images/" cache-period="31556926"/> <mvc:resources mapping="/js/**" location="/js/" cache-period="31556926"/> <mvc:resources mapping="/css/**" location="/css/" cache-period="31556926"/> <mvc:resources mapping="/layer/**" location="/layer/" cache-period="31556926"/> <!--解决启动时候报 No mapping found for HTTP request with URI [/] in DispatcherServlet with name 'appServlet' 的问题--> <mvc:default-servlet-handler/> <!-- Resolves view names to protected .jsp resources within the /WEB-INF/views directory --> <bean class="org.springframework.web.servlet.view.InternalResourceViewResolver"> <property name="prefix" value="/WEB-INF/views/"/> <property name="suffix" value=".jsp"/> <property name="viewClass" value="org.springframework.web.servlet.view.JstlView"/> </bean> <!--系统环境的配置,单例加载--> <bean class="com.jtws.common.base.EnvironmentConfig" id="envConfig" scope="singleton"> <!--是否开启before切入。线上默认关闭0--> <property name="isOpenAspectBefore" value="0"/> <!--是否开启after切入。线上默认关闭0--> <property name="isOpenAspectAfter" value="0"/> <!--是否开启URL拦截器,1开启,0否。线上默认开启1--> <property name="isOpenIncercept" value="1"/> <!--是否开启WEB访问测试模式,1开启,0否。线上默认关闭0--> <property name="isOpenWebTest" value="0"/> </bean> <!-- 自定义拦截拦截器 --> <mvc:interceptors> <bean class="com.jtws.common.base.UrlInteceptor"> <property name="whiteList"> <!--url拦截的白名单--> <list> <value>MP_verify_TjybT2xT2PIUQ6k1.txt</value> <value>/common/not-login</value> <value>/job/load-devmgmt-desc</value> <value>/job/save-method-visit</value> <value>/job/check-init-cfg</value> <value>/job/check-init-mobile-img</value> <value>/job/query-mobile-cat</value> <value>/job/init-mobile-segment</value> <value>/job/init-app</value> <value>/job/statisticalReportMonth</value> <value>/service/user-login</value> <value>/service/register</value> <value>/service/registerSms</value> <value>/service/get-agreement</value> <value>/service/get-verify-img</value> <value>/service/query-user-share-zhzl</value> <value>/service/query-user-share-zhzl-list</value> <value>/service/query-user-share-check-result</value> <value>/service/query-user-share-check-list</value> <value>/service/query-share-by-code</value> <value>/service/query-devmgmt-desc</value> <value>/service/pro-get-share-result</value> <value>/service/query-nav-img</value> <value>/service/login-out</value> <value>/monitor/user</value> <value>/monitor/userQueySizeDevmgmtClass</value> <value>/monitor/devmgmtSize</value> <value>/staService/sta-user-check-result</value> <value>/safeService/versionManagement</value> <value>/safeService/forget-pwd</value> <value>/payment/deal-user-levelup</value> <value>/payment/deal-user-check-item</value> <value>/payment/deal-user-modify-level</value> <value>/pingxx-service/webhooks</value> <value>/monitor/send-verify-msg-mobile</value> <value>/monitor/addMail</value> <value>/monitor/bulid-active-cards</value> <value>/monitor/update-equipment</value> <value>/monitor/batch-write-diary</value> <value>/monitor/clear-devmgmt-cache</value> <value>/ucc/send-msg</value> <value>/ucc/send-internal-msg</value> <value>/devmgmt/get-dev-desc</value> <value>/app/get-method-visit</value> <value>/diary/query-share-diary</value> <value>/about/about-us-modluar</value> <value>/mail/get-res-video</value> <value>/web/report-index</value> <value>/web/monthcheckPage</value> <value>/web/pro-month-check-page</value> <value>/web/share-result</value> <value>/web/share-overview</value> <value>/web/documentation</value> <value>/web/video</value> <value>/web/video-play</value> <value>/web/family-rule</value> <value>/openapi/register</value> <value>/openapi/find-user</value> <value>/report/pro-get-report-devmgmtClass</value> <value>/report/pro-get-report-devmgmt</value> <value>/report/pro-get-devmgmt-continuity-value</value> <value>/report/getReportDevmgmtClass</value> <value>/report/getReportDevmgmt</value> <!--老版本APP使用,以后可删除--> <value>/report/monthlyPage</value> <!----> <!--动态报表,临时测试用--> <value>/report/open-dev-clz</value> <!----> <!--计算模块--> <value>/compute/</value> <!--计算模块--> <value>/favicon.ico</value> <value>/s/</value> <value>/images/</value> <value>/layer/</value> <value>/js/</value> <value>/css/</value> <value>d.html</value> <value>d.jsp</value> <value>/download/</value> <value>/interact/articles</value> <value>/interact/article</value> <value>/report/single-time-report-details</value> </list> </property> <!--web访问方式,验证访问URL的用户是否登录--> <property name="webList"> <list> <value>/web/login</value> <value>/web/user-login</value> <value>/web/get-user-role</value> <value>/web/user-pay-center</value> <value>/web/get-payment-list</value> <value>/web/get-user-payment</value> <value>/web/payIncrement</value> <value>/web/get-pay-increment-list</value> <value>/web/get-payment-list-page</value> <value>/web/get-user-levelup</value> <value>/web/get-coupon-code-page</value> <value>/web/overview-report</value> </list> </property> </bean> </mvc:interceptors> <!--spring 加载各种组件,注意顺序,spring-config是读取配置文件,后面的数据库等依赖于它--> <import resource="classpath:config/spring-config.xml"/> <import resource="classpath:config/spring-basic.xml"/> <import resource="classpath:config/spring-db.xml"/> <import resource="classpath:config/spring-db1.xml"/> <import resource="classpath:config/spring-redis.xml"/> <import resource="classpath:config/spring-thread-config.xml"/> <!--spring 加载其他组件--> </beans>