maven+ssh+bootstrap整合之配置文件

配置web.xml

在web文件中配置,Struts的核心filterspring容器以及urlrewrite
对于使用spring的web应用,无需手动创建spring容器,只需借助于配置文件即可。为了让spring容器随web应用的启动而自启动,需要借助于ServletContextListener监听器。spring提供了ContextLoaderListener监听器类,该类实现了ServletContextListener接口。
代码如下
struts2的filter-mapping一定要加上
REQUEST
FORWARD

  <!-- 配置Url Rewrite的Filter -->
  <filter>
    <filter-name>UrlRewriteFilter</filter-name>
    <filter-class>org.tuckey.web.filters.urlrewrite.UrlRewriteFilter</filter-class>
    <init-param>
      <!-- 设置自动更新urlrewrite.xml信息 -->
      <param-name>confReloadCheckInterval</param-name>
      <param-value>60</param-value>
    </init-param>
    <init-param>
      <param-name>confPath</param-name>
      <param-value>/WEB-INF/urlrewrite.xml</param-value>
    </init-param>
    <init-param>
      <param-name>logLevel</param-name>
      <param-value>WARN</param-value>
    </init-param>
  </filter>
  <!-- 配置Url Rewrite的Filter拦截所有请求 -->
  <filter-mapping>
    <filter-name>UrlRewriteFilter</filter-name>
    <url-pattern>/*</url-pattern>
    <dispatcher>REQUEST</dispatcher>
    <dispatcher>FORWARD</dispatcher>
  </filter-mapping>
  <!--Struts 2 的核心Filter-->
  <filter>
    <filter-name>struts2</filter-name>
    <filter-class>org.apache.struts2.dispatcher.filter.StrutsPrepareAndExecuteFilter</filter-class>
  </filter>
  <filter-mapping>
    <filter-name>struts2</filter-name>
    <url-pattern>/*</url-pattern>
    <dispatcher>REQUEST</dispatcher>
    <dispatcher>FORWARD</dispatcher>
  </filter-mapping>

  <context-param>
    <param-name>contextConfigLocation</param-name>
    <param-value>classpath*:/applicationContext.xml,classpath*:/daoContext.xml</param-value>
  </context-param>
  <listener>
    <listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>
  </listener>
  <welcome-file-list>
    <welcome-file>/WEB-INF/content/main.jsp</welcome-file>
  </welcome-file-list>

配置urlrewrite.xml

<?xml version="1.0" encoding="utf-8"?>
<!DOCTYPE urlrewrite PUBLIC "-//tuckey.org//DTD UrlRewrite 3.2//EN" "\\urlrewrite3.2.dtd">
<urlrewrite>

<rule>

    <!-- $必不可少-->
    <from>/index.html$</from>
    <to type="forward">/index.jsp</to>
</rule>

<rule>
        <from>/([A-Za-z0-9]+).html$</from>
        <to type="forward">$1</to>
 </rule>
    
<rule>
    <!--每一小段正则表达式要加括号-->
    <from>/([A-Za-z0-9]+)$</from>
    <to type="forward">/content/$1.jsp</to>
</rule>

<rule>
    <!--forward(转发模式)传参-->
    <from>/([A-Za-z0-9]+)/([A-Za-z0-9]+)/([A-Za-z0-9]+).do$</from>
    <to type="forward">/$1.jsp?username=$2&amp;password=$3</to>
</rule>

<rule>
    <!--redirect(重定向模式)传参,to中写绝对地址-->
    <from>/admin/([A-Za-z0-9]+)/([A-Za-z0-9]+)/([A-Za-z0-9]+).do$</from>
    <to type="redirect">/checksystem/$1.jsp?username=$2&amp;password=$3</to>
</rule>

</urlrewrite>

配置struts.xml

以下为基础struts配置文件

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

<!DOCTYPE struts PUBLIC
        "-//Apache Software Foundation//DTD Struts Configuration 2.5//EN"
        "http://struts.apache.org/dtds/struts-2.5.dtd">

<struts>
    <!--配置常量-->
    <constant name="struts.custom.i18n.resources" value="resource"></constant>
    <constant name="struts.i18n.encoding" value="UTF-8"></constant>
    <!--开发者模式-->
    <constant name="struts.devMode" value="true"></constant>
    <!--放行静态资源-->
    <constant name="struts.action.excludePattern" value="/static" />
    <package name="default" extends="struts-default">
        <action name="*">
            <result>/WEB-INF/content/{1}.jsp</result>
        </action>
    </package>
</struts>

hibernate.cfg.xml配置文件

该配置文件包含了hibernate的二级缓存EhCache
EhCache还需要依赖于commons-logging、backport-util-concurrent两个工具包以及一个ehcache.xml配置文件

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE hibernate-configuration PUBLIC
        "-//Hibernate/Hibernate Configuration DTD 3.0//EN"
        "http://www.hibernate.org/dtd/hibernate-configuration-3.0.dtd">
<hibernate-configuration>
    <session-factory>
        <!-- 指定连接数据库所用的驱动 -->
        <property name="connection.driver_class">com.mysql.cj.jdbc.Driver</property>
        <!-- 指定连接数据库的url,其中hibernate是本应用连接的数据库名 -->
        <property name="connection.url">jdbc:mysql://localhost/项目名?serverTimezone=UTC&amp;useSSL=true</property>
        <!-- 指定连接数据库的用户名 -->
        <property name="connection.username">用户名</property>
        <!-- 指定连接数据库的密码 -->
        <property name="connection.password">密码</property>
        <!-- 指定连接池里最大连接数 -->
        <property name="hibernate.c3p0.max_size">20</property>
        <!-- 指定连接池里最小连接数 -->
        <property name="hibernate.c3p0.min_size">1</property>
        <!-- 指定连接池里连接的超时时长 -->
        <property name="hibernate.c3p0.timeout">5000</property>
        <!-- 指定连接池里最大缓存多少个Statement对象 -->
        <property name="hibernate.c3p0.max_statements">100</property>
        <!--空闲测试周期-->
        <property name="hibernate.c3p0.idle_test_period">3000</property>
        <property name="hibernate.c3p0.acquire_increment">2</property>
        <property name="hibernate.c3p0.validate">true</property>
         <!--日志存放位置和日志名-->
        <property name="LOG_HOME">/logs</property>
        <property name="LOG_FILE_NAME">loveccdata</property>
        <!--开启二级缓存-->
        <property name="hibernate.cache.use_second_level_cache">true</property>
        <!--设置缓存区的实现类-->
        <property name="hibernate.cache.region.factory_class">org.hibernate.cache.ehcache.internal.EhcacheRegionFactory</property>
        <!-- 指定数据库方言 -->
        <property name="dialect">org.hibernate.dialect.MySQL5Dialect</property>
        <!-- 根据需要自动创建数据表 -->
        <property name="hbm2ddl.auto">update</property>
        <!-- 显示Hibernate持久化操作所生成的SQL -->
        <property name="show_sql">true</property>
        <!-- 将SQL脚本进行格式化后再输出 -->
        <property name="hibernate.format_sql">true</property>
        <!-- 罗列所有持久化类的类名 -->
        <mapping class="类的全限定类名"/>
    </session-factory>
</hibernate-configuration>

ehcache.xml配置文件

<?xml version="1.0" encoding="UTF-8"?>
<ehcache>
    <diskStore path="java.io.tmpdir"/>
    <!--maxElementsInMemory设置缓存中最多可放多少个对象-->
    <!--eternal设置缓存是否永久有效-->
    <!--overflowToDisk溢出到磁盘-->
    <!--timeToIdleSeconds设置缓存对象多少秒没有被使用就会清理掉-->
    <!--timeToLiveSeconds设置缓存的对象在过期之前可以缓存多少秒-->
    <!--diskPersistent设置缓存是否被序列化到硬盘中,保存路径由diskStore指定-->
    <defaultCache
            maxElementsInMemory="10000"
            eternal="false"
            overflowToDisk="true"
            timeToIdleSeconds="120"
            timeToLiveSeconds="120"
            diskPersistent="false"/>
</ehcache>

log4j2.xml配置文件

日志文件可以再tomcat的安装目录查到

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

<!--日志级别以及优先级排序: OFF > FATAL > ERROR > WARN > INFO > DEBUG > TRACE > ALL -->

<!--Configuration后面的status,这个用于设置log4j2自身内部的信息输出,可以不设置,当设置成trace时,你会看到log4j2内部各种详细输出-->

<!--monitorInterval:Log4j能够自动检测修改配置 文件和重新配置本身,设置间隔秒数-->

<configuration status="WARN" monitorInterval="20">

    <!--先定义所有的appender-->

    <appenders>

        <!--这个输出控制台的配置
        %l        输出日志事件发生位置,包括类目名、发生线程,在代码中的行数
        %d       输出日志时间其格式为 %d{yyyy-MM-dd HH:mm:ss,SSS},可指定格式 如 %d{HH:mm:ss}
        %p       输出优先级,即 FATAL ,ERROR,WARN 等
        %m      输出代码指定信息,如info(“message”),输出message
        %n       换行符
        -->

        <console name="Console" target="SYSTEM_OUT">

            <!--输出日志的格式-->

            <PatternLayout pattern="[%d{yyyy-MM-dd HH:mm:ss,SSS} [%p] - %l - %m%n"/>

        </console>

        <!--文件会打印出所有信息,这个log每次运行程序会自动清空,由append属性决定,这个也挺有用的,适合临时测试用-->

        <File name="log" fileName="log/test.log" append="false">
            <!--
            %-5level 输出日志级别,-5表示左对齐并且固定输出5个字符,如果不足在右边补0
            %msg     日志文本
            -->
            <PatternLayout pattern="%d{HH:mm:ss.SSS} %-5level %class{36} %L %M - %msg%xEx%n"/>

        </File>

        <!-- 这个会打印出所有的info及以下级别的信息,每次大小超过size,则这size大小的日志会自动存入按年份-月份建立的文件夹下面并进行压缩,作为存档-->

        <RollingFile name="RollingFileInfo" fileName="${LOG_HOME}/${LOG_FILE_NAME}_info.log"

                     filePattern="${LOG_HOME}/$${date:yyyy-MM}/info-%d{yyyy-MM-dd}-%i.log">

            <!--控制台只输出level及以上级别的信息(onMatch),其他的直接拒绝(onMismatch)-->

            <ThresholdFilter level="info" onMatch="ACCEPT" onMismatch="DENY"/>

            <PatternLayout pattern="[%d{HH:mm:ss:SSS}] [%p] - %l - %m%n"/>

            <Policies>

                <!-- TimeBasedTriggeringPolicy 超过指定时间时,触发Rolling
            需要和filePattern结合使用 filePattern中的${FILE_NAME}-%d{yyyy-MM-dd HH-mm}-%i.log
            此时是mm,指定时间单位为分钟--> 
                <TimeBasedTriggeringPolicy interval="1" />

                <!-- SizeBasedTriggeringPolicy  指定当文件体积大于size指定的值时,触发Rolling -->
                <SizeBasedTriggeringPolicy size="100 MB"/>

            </Policies>
            <!-- DefaultRolloverStrategy属性如不设置,则默认为最多同一文件夹下7个文件,这里设置了30 -->
            <DefaultRolloverStrategy max="30"/>

        </RollingFile>

        <RollingFile name="RollingFileWarn" fileName="${LOG_HOME}/${LOG_FILE_NAME}_warn.log"

                     filePattern="${LOG_HOME}/$${date:yyyy-MM}/warn-%d{yyyy-MM-dd}-%i.log">

            <ThresholdFilter level="warn" onMatch="ACCEPT" onMismatch="DENY"/>

            <PatternLayout pattern="[%d{HH:mm:ss:SSS}] [%p] - %l - %m%n"/>

            <Policies>

                <TimeBasedTriggeringPolicy interval="1"/>

                <SizeBasedTriggeringPolicy size="100 MB"/>

            </Policies>


            <DefaultRolloverStrategy max="30"/>

        </RollingFile>

        <RollingFile name="RollingFileError" fileName="${LOG_HOME}/${LOG_FILE_NAME}_error.log"

                     filePattern="${LOG_HOME}/$${date:yyyy-MM}/error-%d{yyyy-MM-dd}-%i.log">

            <ThresholdFilter level="error" onMatch="ACCEPT" onMismatch="DENY"/>

            <PatternLayout pattern="[%d{HH:mm:ss:SSS}] [%p] - %l - %m%n"/>

            <Policies>

                <TimeBasedTriggeringPolicy interval="1"/>

                <SizeBasedTriggeringPolicy size="100 MB"/>

            </Policies>
            <DefaultRolloverStrategy max="30"/>

        </RollingFile>

    </appenders>

    <!--然后定义logger,只有定义了logger并引入appender,appender才会生效-->

    <loggers>

        <!--过滤掉spring和mybatis的一些无用的DEBUG信息-->

        <logger name="org.springframework" level="INFO"></logger>

        <logger name="org.hibernate" level="INFO"></logger>

        <root level="all">

            <appender-ref ref="Console"/>

            <appender-ref ref="RollingFileInfo"/>

            <appender-ref ref="RollingFileWarn"/>

            <appender-ref ref="RollingFileError"/>

        </root>

    </loggers>

</configuration>

daoContext.xml

用于配置DAO组件以及配置SessionFactory实例

<?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"
       xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd">
    <bean id="sessionFactory" class="org.springframework.orm.hibernate5.LocalSessionFactoryBean"
          p:configLocation="classpath:hibernate.cfg.xml"></bean>

    <bean name="bean名" class="dao组件的全限定类名" lazy-init="true"
          p:sessionFactory-ref="sessionFactory"></bean>
</beans>

quartz.properties

# 配置主调度器属性
org.quartz.scheduler.instanceName = QuartzScheduler
org.quartz.scheduler.instanceId  = AUTO
# 配置线程池
# Quartz线程池的实现类
org.quartz.threadPool.class = org.quartz.simpl.SimpleThreadPool
# 线程池的线程数量
org.quartz.threadPool.threadCount = 1
# 线程池里线程的优先级
org.quartz.threadPool.threadPriority = 10
# 配置作业存储
org.quartz.jobStore.misfireThreshold = 60000
org.quartz.jobStore.class = org.quartz.simpl.RAMJobStore

applicationContext.xml

用于配置bean,配置quartz框架的触发器和调度器

<?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:p="http://www.springframework.org/schema/p"
       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/tx
	http://www.springframework.org/schema/tx/spring-tx.xsd
	http://www.springframework.org/schema/aop
	http://www.springframework.org/schema/aop/spring-aop.xsd">
    <!-- 定义业务逻辑组件模板,为之注入DAO组件 -->
    <bean id="managerTemplate" abstract="true" lazy-init="true">
        <property name="applicationDao" ref="applicationDao"></property>
        <property name="attendTypeDao" ref="attendTypeDao"></property>
        <property name="employeeDao" ref="employeeDao"></property>
        <property name="managerDao" ref="managerDao"></property>
        <property name="paymentDao" ref="paymentDao"></property>
        <property name="attendDao" ref="attendDao"></property>
        <property name="checkBackDao" ref="checkBackDao"></property>
    </bean>
    <!-- 定义两个业务逻辑组件,继承业务逻辑组件的模板 -->
    <bean id="empManager"
          class="service.impl.EmpManagerImpl"
          parent="managerTemplate"/>
    <bean id="mgrManager"
          class="service.impl.MgrManagerImpl"
          parent="managerTemplate"/>

    <!-- 配置Hibernate的局部事务管理器,使用HibernateTransactionManager类
		并注入SessionFactory的引用 -->
    <bean id="transactionManager" class="org.springframework.orm.hibernate5.HibernateTransactionManager"
          p:sessionFactory-ref="sessionFactory"></bean>
    <!--定义触发器 cronExpression指定Cron表达式:每月3日4时启动-->
    <bean id="cronTriggerPay" class="org.springframework.scheduling.quartz.CronTriggerFactoryBean"
    p:cronExpression="0 0 4 3 * ? *">
        <property name="jobDetail">
            <!-- 使用嵌套Bean的方式来定义任务Bean
				jobClass指定任务Bean的实现类 -->
            <bean class="org.springframework.scheduling.quartz.JobDetailFactoryBean"
                  p:jobClass="schedule.PayJob"
                  p:durability="true">
                <!--为任务bean注入属性-->
                <property name="jobDataAsMap">
                    <map>
                        <entry key="empManager" value-ref="empManager"></entry>
                    </map>
                </property>
            </bean>
        </property>
    </bean>
    <!--定义触发器 cronExpression指定Cron表达式:周一到周五7点、12点执行调度-->
    <bean id="cronTriggerPunch" class="org.springframework.scheduling.quartz.CronTriggerFactoryBean"
          p:cronExpression="0 0 7,12 ? * MON-FRI">
        <property name="jobDetail">
            <!-- 使用嵌套Bean的方式来定义任务Bean
				jobClass指定任务Bean的实现类 -->
            <bean class="org.springframework.scheduling.quartz.JobDetailFactoryBean"
                  p:jobClass="schedule.PunchJob"
                  p:durability="true">
                <!--为任务bean注入属性-->
                <property name="jobDataAsMap">
                    <map>
                        <entry key="empManager" value-ref="empManager"></entry>
                    </map>
                </property>
            </bean>
        </property>
    </bean>
    <!--调度器-->
    <bean class="org.springframework.scheduling.quartz.SchedulerFactoryBean">
        <property name="triggers">
            <list>
                <ref bean="cronTriggerPay"></ref>
                <ref bean="cronTriggerPunch"></ref>
            </list>
        </property>
    </bean>
    <!--配置事务增强处理bean-->
    <tx:advice id="txAdvice" transaction-manager="transactionManager">
        <tx:attributes>
            <tx:method name="get*" read-only="true"/>
            <tx:method name="*"></tx:method>
        </tx:attributes>
    </tx:advice>
    <aop:config>
        <!-- 配置一个切入点,匹配empManager和mgrManager
			两个Bean的所有方法的执行 -->
        <aop:pointcut id="myPointcut" expression="bean(empManager) or bean(mgrManager)"></aop:pointcut>
        <!--指定在切入点应用事务增强处理-->
        <aop:advisor advice-ref="txAdvice" pointcut-ref="myPointcut"></aop:advisor>
    </aop:config>
</beans>
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值