앱)springframework로 batch 예제(main+applicationcontext+properties+logback)

Posted by HULIA(휴리아)
2018. 1. 23. 10:12 백엔드개발/자바스프링
☆☆☆☆☆main
public class mainApplicaion{
    public static void main(String[] args) {
       String jobMgr = System.getProperty("jobmgr.home");
       if(StringUtils.isEmpty(jobMgr)){
       //에러(jobMgr Home is Empty)
       return;
      }
      if( !(new File(jobMgr)).exists()) {
     //에러(Invalid jobmgr Home + jobMgr+)
      return;
      }
   
      String serverType = System.getProperty("server.type");
      if(StringUtils.isEmpty(serverType)){
      //에러
      return;
     }
     
      LoggerContext context = (LoggerContext) LoggerFactory.getILoggerFactory();
      JoranConfigurator jc = new JoranConfigurator();
       jc.setContext(context);
       context.reset ();//우리가 설정한 logback 설정만 적용된다
       try{
          jc.doConfigure(new ClassPathResource("logback"+System.getProperty("server.type")+".xml").getInputStream());
       }catch(Exception e){
          return;
       }



      ApplicationContext springContext = new ClassPathXmlApplicationContext("spring/applicationContext.xml");
  }
}


☆☆☆☆☆scheduler@service
@scheduled(fixedDelayString="jobmgr.runnig.interval"+"000")
public void doTest(){
     doTestBiz();
}



☆☆☆☆☆service, biz @service
@Value("${jobmgr.running.interval}")
private String interval;

@Async("testExcecutor")
public doTestBiz(){

}


☆☆☆☆☆application context
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:context="http://www.springframework.org/schema/context"
xmlns:jms="http://www.springframework.org/schema/jms"
xmlns:amq="http://activemq.apache.org/schema/core"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:p="http://www.springframework.org/schema/p"
xmlns:tx="http://www.springframework.org/schema/tx"
xmlns:task="http://www.springframework.org/schema/task"
xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd
http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-3.2.xsd
http://www.springframework.org/schema/tx http://www.springframework.org/schema/tx/spring-tx-3.0.xsd
http://www.springframework.org/schema/jms http://www.springframework.org/schema/jms/spring-jms.xsd
http://activemq.apache.org/core http://activemq.apache.org/schema/core/activemq-core.xsd
http://www.springframework.org/schema/task http://www.springframework.org/schema/task/spring-task-3.0.xsd">

<context:anntaion-config />

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

<task:anntation-driven />

<task:schduler id="scheduler" pool-size="${jobmgr.defaultSchedulerSize}" />

<task:executor id="testExecutor" pool-size="${jobmgr.testExecutor.size}" />

<bean class="org.springframework.beans.factory.config.PropertyPlaceholderConfigurer">
    <property anme"locations">
          <list>
                <value>batch${server.type}.properties</value>
          </list>
     </property>
</bean>

<bean id="dataSource" class="com.istoryful.util.CrytoDataSourceUtil" destory-method="close">
    <property name="driverClassName" value="${jdbc.driver}" />
<property name="url" value="${jdbc.url}" />
<property name="username" value="${jdbc.username}" />
<property name="password" value="${jdbc.password}" />
<property name="maxTotal" value="${jdbc.maxTotal}" />
<property name="maxIdle" value="${jdbc.maxIdle}" />
</bean>

<bean id="sqlSessionFactory" class="org.mybatis.spring.SqlSessionFactoryBean">
   <property name="dataSource" ref="dataSource" />
   <property name="configLocation" value="classpath:mybatis/mybatisConfig.xml" />
</bean>

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

<bean class="org.springframework.jdbc.core.JdbcTemplate">
   <property name="dataSource" ref="dataSource" />
</bean>

<tx:annotation-driven trasction-manager="transactionManager" />

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





☆☆☆☆☆properties
jdbc.vendor=mysql
jdbc.driver=
jdbc.url=
jdbc.username=
jdbc.password=
jdbc.maxTotal=
jdbc.maxIdle=

jobmgr.defaultSchedulerSize=1
jobmgr.testExecuotr.size=3

jobmgr.running.interval=60

☆☆☆☆☆vm arguments
-Djobmgr.home=C:\Batch
-Dserver.type=Local


☆☆☆☆☆logback
<?xml version="1.0" encoding="UTF-8"?>
<configuration scan="true" scanPeriod="1 seconds">
<appender name="CONSOLE" class="ch.qos.logback.core.ConsoleAppender">
   <encoder>
       <pattern>%-30(%d{HH:mm:ss.SSS} [%thread]) %-5level %logger{0} - %msg %n %ex</pattern>
</encoder>
</appender>


<appender name="INFOFILE" class="ch.qos.logback.core.rolling.RollingFileAppender">
   <rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
       <fileNamePattern>${jobmgr.home}/logs/info.%d{yyyy-MM-dd}.log</fileNamePattern>
<maxHistory>30</maxHistory>
</rollingPolicy>
<encoder>
    <pattern>%-30(%d{HH:mm:ss.SSS} [%thread]) %-5level %logger{0} - %msg %n %ex</pattern>
</encoder>
<filter class="ch.qos.logback.classic.filter.LevelFilter">
    <level>ERROR</level>
    <onMatch>DENY</onMatch>
    <onMismatch>ACCEPT</onMismatch>
</filter>
</appender>


<appender name="ERRORFILE" class="ch.qos.logback.core.rolling.RollingFileAppender">
<rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
<fileNamePattern>${jobmgr.home}/logs/error.%d{yyyy-MM-dd}.log</fileNamePattern>
<maxHistory>30</maxHistory>
</rollingPolicy>
<encoder>
    <pattern>%-30(%d{HH:mm:ss.SSS} [%thread]) %-5level %logger{0} - %msg %n %ex</pattern>
</encoder>
<filter class="ch.qos.logback.classic.filter.LevelFilter">
<level>ERROR</level>
<onMatch>ACCEPT</onMatch>
<onMismatch><DENY</onMismatch>
</filter>
</appender>

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

<logger name="JOB" level="INFO">
   <appender-ref ref="INFOFILE" />
   <appender-ref ref="ERRORFILE" />
</logger>

</configuration>



☆☆☆☆☆logger
private static final Logger logger = LoggerFactory.getLogger("JOB");


☆☆☆☆☆mybatisconfig
<?xml version="1.0" encoding="UTF-8"?>
<configuration>
   <settings>
     <setting name="cacheEnabled" value="false" />
      <setting name="useGeneratedKeys" value="true" />
     <setting name="defaultExecutorType" value="REUSE" />
     <setting name="defaultStatementTimeout" value="3480" /><!-- SQL timeout 58 minutes-->
</settings>
    
   <typeAliases>
     <typeAlias alias="VO" type="com.istoryful.VO />
   </typeAliases>

<mappers>
   <mapper resource="mybatis/mysql/DAO.xml" />
</mappers>

</configuration>


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

<mapper namespace="sql.DAO">


   <resultMap id="Vo" type="VO">
       <result property="test"  column="TEST" />
       <result property="test"  column="TEST" />
       <result property="test"  column="TEST" />
       <result property="test"  column="TEST" />
</resultMap>



<insert id="testInsert">
</insert>


<select id="testSelect">
</select>

<update id="testUpdate">
</update>

</mapper>