<?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 https://www.springframework.org/schema/beans/spring-beans.xsd">
	
	<!-- Root Context: defines shared resources visible to all other web components -->
		
		
	<!-- 1. batch에 사용할 SqlSessionFactory Bean을 하나 생성. 데이터소스와 config.xml은 기존 것을 그냥 사용해도 무방함 
	<bean id="sqlSessionFactoryBatch" class="org.mybatis.spring.SqlSessionFactoryBean">
	    <property name="dataSource" ref="dataSource" />
	    <property name="configLocation" value="/WEB-INF/mapper/*.xml" />
	</bean>	  
	 2. 1에서 생성한 Factory Bean을 사용하는 SqlSessionTemplate Bean을 생성 
	<bean id="sqlSessionTemplateBatch" name="sqlSessionTemplateBatch" class="org.mybatis.spring.SqlSessionTemplate">
	    <constructor-arg index="0" ref="sqlSessionFactoryBatch" /> 
	    <constructor-arg index="1" value="BATCH" /> 
	</bean>   	  
	3. Transaction Manager 설정 	
	<bean id="transactionManagerBatch" class="org.springframework.jdbc.datasource.DataSourceTransactionManager">
	    <property name="dataSource" ref="dataSource" />
	</bean> 
		
		
	<bean id="dbUtil" class="com.elt.util.DBConnectUtil">
		<constructor-arg ref="sqlSessionFactory" />
	</bean>
	
-->	
			
	<bean id="plantService" class="com.elt.ems.service.PlantService">
		<constructor-arg ref="plantMapper" />
	</bean>
	
	<bean id="plantMapper" class="org.mybatis.spring.mapper.MapperFactoryBean">
		<property name="mapperInterface" value="com.elt.ems.mapper.PlantMapper" />
		<property name="sqlSessionFactory" ref="sqlSessionFactory" />
	</bean>
	
	<bean id="pmsDataService" class="com.elt.ems.service.PmsDataService">
		<constructor-arg ref="pmsDataMapper" />
	</bean>
	
	<bean id="pmsDataMapper" class="org.mybatis.spring.mapper.MapperFactoryBean">
		<property name="mapperInterface" value="com.elt.ems.mapper.PmsDataMapper" />
		<property name="sqlSessionFactory" ref="sqlSessionFactory" />
	</bean>	
	
	<bean id="statDataService" class="com.elt.ems.service.StatisticDataService">
		<constructor-arg ref="statDataMapper" />
	</bean>
	
	<bean id="statDataMapper" class="org.mybatis.spring.mapper.MapperFactoryBean">
		<property name="mapperInterface" value="com.elt.ems.mapper.StatisticDataMapper" />
		<property name="sqlSessionFactory" ref="sqlSessionFactory" />
	</bean>		
	
	<bean id="codeService" class="com.elt.ems.service.CodeService">
		<constructor-arg ref="codeMapper" />
	</bean>
	
	<bean id="codeMapper" class="org.mybatis.spring.mapper.MapperFactoryBean">
		<property name="mapperInterface" value="com.elt.ems.mapper.CodeMapper" />
		<property name="sqlSessionFactory" ref="sqlSessionFactory" />
	</bean>		
	
	<bean id="pmsService" class="com.elt.ems.service.PmsService">
		<constructor-arg ref="pmsMapper" />
	</bean>
	
	<bean id="pmsMapper" class="org.mybatis.spring.mapper.MapperFactoryBean">
		<property name="mapperInterface" value="com.elt.ems.mapper.PmsMapper" />
		<property name="sqlSessionFactory" ref="sqlSessionFactory" />
	</bean>	
	
	<bean id="kescoService" class="com.elt.ems.service.KescoService">
		<constructor-arg ref="kescoMapper" />
	</bean>
	
	<bean id="kescoMapper" class="org.mybatis.spring.mapper.MapperFactoryBean">
		<property name="mapperInterface" value="com.elt.ems.mapper.KescoMapper" />
		<property name="sqlSessionFactory" ref="sqlSessionFactory" />
	</bean>		
	
	<bean id="userService" class="com.elt.ems.service.UserService">
		<constructor-arg ref="userMapper" />
	</bean>
	
	<bean id="userMapper" class="org.mybatis.spring.mapper.MapperFactoryBean">
		<property name="mapperInterface" value="com.elt.ems.mapper.UserMapper" />
		<property name="sqlSessionFactory" ref="sqlSessionFactory" />
	</bean>		
	
	
	 <bean id="cronSendMailKescoTrigger" class="org.springframework.scheduling.quartz.CronTriggerBean">
		 <property name="jobDetail">
		 
	        <bean id="cronSendMailKescoJob" class="org.springframework.scheduling.quartz.JobDetailBean">
	            <property name="jobClass" value="com.elt.ems.cron.SendMailKescoQuartz" />
	            <property name="applicationContextJobDataKey" value="applicationContext" />
	        </bean>	 
		 </property>
		 <property name="cronExpression" value="0 45 09 * * ?"/>	    	
	</bean>
		
				
	<!-- 1. Cron 대상이 되는 클래스 정의 
 	<bean id="cronSendMailKesco" class="org.springframework.scheduling.quartz.JobDetailBean">
		<property name="jobClass" value="com.elt.ems.cron.SendMailKescoQuartz" />
	</bean>
    
	 2. Cron 시간 설정 
	 <bean id="cronSendMailKescoTrigger" class="org.springframework.scheduling.quartz.CronTriggerBean">
	 <property name="jobDetail" ref="cronSendMailKesco"/>
	 <property name="cronExpression" value="0 54 10 * * ?"/>
	</bean>
	-->
	<!--
	<bean id="cronTrigger1" class="org.springframework.scheduling.quartz.CronTriggerBean">
	    <property name="jobDetail" ref="cronQuartz1"/>
	    <property name="cronExpression" value="0 0 13 * * ?"/>
	</bean>
	<bean id="cronTrigger2" class="org.springframework.scheduling.quartz.CronTriggerBean">
	    <property name="jobDetail" ref="cronQuartz2"/>
	    <property name="cronExpression" value="2/10 * * * * ?"/>
	</bean> -->
				
<!-- 
	Cron Expression  총 7개의 필드 있고 마지막 필드(년도)는 생략 가능하다
	
	 필드이름	허용 값 
	초(Seconds)	0 ~ 59 
	분(Minutes)	0 ~ 59 
	시간(Hours)	0 ~ 23
	달의 날짜(Day-of-month)	1 ~ 31
	달(Month) 	1 ~ 12 or JAN ~ DEC
	주의 날짜(Day-of-week)	1 ~ 7 or SUN-SAT
	년도(Year) (선택가능) 	빈값, 1970 ~ 2099
-->
  
	<!-- 3. Cron 실행 -->
	<bean class="org.springframework.scheduling.quartz.SchedulerFactoryBean">
	    <property name="triggers">
	        <list>
	            <ref bean="cronSendMailKescoTrigger"/>	   
	        </list>
	    </property>
	    <property name="quartzProperties">
	        <props>
	            <prop key="org.quartz.threadPool.class">org.quartz.simpl.SimpleThreadPool</prop>
	            <prop key="org.quartz.threadPool.threadCount">3</prop>
	            <prop key="org.quartz.threadPool.threadPriority">4</prop>
	            <prop key="org.quartz.jobStore.class">org.quartz.simpl.RAMJobStore</prop>
	            <prop key="org.quartz.jobStore.misfireThreshold">60000</prop>
	        </props>
	    </property>
	    <!-- 
		<property name="applicationContextSchedulerContextKey">
		        <value>applicationContext</value>
		</property>	  		    
        <property name="schedulerContextAsMap">
            <map>
                <entry key="plantService" value-ref="plantService" />
            </map>
        </property>-->
	</bean>		
			
</beans>
