앱)springframework로 batch 예제(main+applicationcontext+properties+logback)
☆☆☆☆☆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>
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>
'백엔드개발 > 자바스프링' 카테고리의 다른 글
앱)메이븐 maven pom.xml 예제 (0) | 2018.01.25 |
---|---|
앱)custom Exception class 클래스 예제 (0) | 2018.01.25 |
앱)자바 외부 실행파일 실행 1.7 이상에서 processbuilder 예제로 실행하고 정상적으로 종료 (1) | 2018.01.22 |
앱)runable jar 파일 실행이 되지 않을때 classnotfoundexception에러 날때 (0) | 2018.01.15 |
앱)NoClassDefFoundError java.lang.ClassNotFoundException org.apache.http.protocol.HttpContext (0) | 2017.12.28 |