<?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="clientService" class="com.elt.ems.service.ClientService">
		<constructor-arg ref="clientMapper" />
	</bean>
	
	<bean id="clientMapper" class="org.mybatis.spring.mapper.MapperFactoryBean">
		<property name="mapperInterface" value="com.elt.ems.mapper.ClientMapper" />
		<property name="sqlSessionFactory" ref="sqlSessionFactory" />
	</bean>	
	
	<bean id="messageService" class="com.elt.ems.service.MessageService">
		<constructor-arg ref="messageMapper" />
	</bean>
	
	<bean id="messageMapper" class="org.mybatis.spring.mapper.MapperFactoryBean">
		<property name="mapperInterface" value="com.elt.ems.mapper.MessageMapper" />
		<property name="sqlSessionFactory" ref="sqlSessionFactory" />
	</bean>	
	
	<bean id="csService" class="com.elt.ems.service.CsService">
		<constructor-arg ref="csMapper" />
	</bean>
	
	<bean id="csMapper" class="org.mybatis.spring.mapper.MapperFactoryBean">
		<property name="mapperInterface" value="com.elt.ems.mapper.CsMapper" />
		<property name="sqlSessionFactory" ref="sqlSessionFactory" />
	</bean>
		
		
	<bean id="reportService" class="com.elt.ems.service.ReportService">
		<constructor-arg ref="reportMapper" />
	</bean>
	
	<bean id="reportMapper" class="org.mybatis.spring.mapper.MapperFactoryBean">
		<property name="mapperInterface" value="com.elt.ems.mapper.ReportMapper" />
		<property name="sqlSessionFactory" ref="sqlSessionFactory" />
	</bean>
			
	<bean id="smsService" class="com.elt.ems.service.SmsService">
		<constructor-arg ref="smsMapper" />
	</bean>
	
	<bean id="smsMapper" class="org.mybatis.spring.mapper.MapperFactoryBean">
		<property name="mapperInterface" value="com.elt.ems.mapper.SmsMapper" />
		<property name="sqlSessionFactory" ref="sqlSessionFactory" />
	</bean>	
	
	<bean id="boardService" class="com.elt.ems.service.BoardService">
		<constructor-arg ref="boardMapper" />
	</bean>
	
	<bean id="boardMapper" class="org.mybatis.spring.mapper.MapperFactoryBean">
		<property name="mapperInterface" value="com.elt.ems.mapper.BoardMapper" />
		<property name="sqlSessionFactory" ref="sqlSessionFactory" />
	</bean>	
	
	<bean id="weatherService" class="com.elt.ems.service.WeatherService">
		<constructor-arg ref="weatherMapper" />
	</bean>
	
	<bean id="weatherMapper" class="org.mybatis.spring.mapper.MapperFactoryBean">
		<property name="mapperInterface" value="com.elt.ems.mapper.WeatherMapper" />
		<property name="sqlSessionFactory" ref="sqlSessionFactory" />
	</bean>		
		
	<bean id="priceService" class="com.elt.ems.service.PriceService">
		<constructor-arg ref="priceMapper" />
	</bean>
	
	<bean id="priceMapper" class="org.mybatis.spring.mapper.MapperFactoryBean">
		<property name="mapperInterface" value="com.elt.ems.mapper.PriceMapper" />
		<property name="sqlSessionFactory" ref="sqlSessionFactory" />
	</bean>		
		
	<bean id="ivtService" class="com.elt.ems.service.IvtService">
		<constructor-arg ref="ivtMapper" />
	</bean>
	
	<bean id="ivtMapper" class="org.mybatis.spring.mapper.MapperFactoryBean">
		<property name="mapperInterface" value="com.elt.ems.mapper.IvtMapper" />
		<property name="sqlSessionFactory" ref="sqlSessionFactory" />
	</bean>	
	
	<bean id="dataTableService" class="com.elt.ems.service.DataTableService">
		<constructor-arg ref="dataTableMapper" />
	</bean>
		
	<bean id="dataTableMapper" class="org.mybatis.spring.mapper.MapperFactoryBean">
		<property name="mapperInterface" value="com.elt.ems.mapper.DataTableMapper" />
		<property name="sqlSessionFactory" ref="sqlSessionFactory" />
	</bean>
	
	<bean id="devEtcService" class="com.elt.ems.service.DevEtcService">
		<constructor-arg ref="devEtcMapper" />
	</bean>
		
	<bean id="devEtcMapper" class="org.mybatis.spring.mapper.MapperFactoryBean">
		<property name="mapperInterface" value="com.elt.ems.mapper.DevEtcMapper" />
		<property name="sqlSessionFactory" ref="devsqlSessionFactory" />
	</bean>	
	
    <bean id="workLinkService" class="com.elt.ems.service.WorkLinkService">
        <constructor-arg ref="workLinkMapper" />
    </bean>
        
    <bean id="workLinkMapper" class="org.mybatis.spring.mapper.MapperFactoryBean">
        <property name="mapperInterface" value="com.elt.ems.mapper.WorkLinkMapper" />
        <property name="sqlSessionFactory" ref="sqlSessionFactory" />
    </bean> 
    
    <bean id="pmeterService" class="com.elt.ems.service.PMeterService">
        <constructor-arg ref="pmeterMapper" />
    </bean>
        
    <bean id="pmeterMapper" class="org.mybatis.spring.mapper.MapperFactoryBean">
        <property name="mapperInterface" value="com.elt.ems.mapper.PMeterMapper" />
        <property name="sqlSessionFactory" ref="sqlSessionFactory" />
    </bean> 
	
	<bean id="multipartResolver" class="org.springframework.web.multipart.commons.CommonsMultipartResolver" >
		<property name="maxUploadSize" value="100000000" />
        <property name="maxInMemorySize" value="100000000" />
	</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 0 09 * * ?"/>	    	
	</bean>
	-->			
				
	<!-- 1. Cron 대상이 되는 클래스 정의 -->
 	<bean id="cronSendMailKesco" class="org.springframework.scheduling.quartz.JobDetailBean">
		<property name="jobClass" value="com.elt.ems.cron.TestLogMakeQuartz" />
	</bean>
    
	<!--
	 2. Cron 시간 설정  -->
	 <bean id="cronSendMailKescoTrigger" class="org.springframework.scheduling.quartz.CronTriggerBean">
	 <property name="jobDetail" ref="cronSendMailKesco"/>
	 <property name="cronExpression" value="30 1 0 * * ?"/>
	</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>
	</bean>	
		
			
</beans>
