Daum Cloud 용량을 100GB 로 업그레이드 해주네요!!
hanmail.net 을 쭉썼는데.. 클라우드때문에 주소 옴깁니다.
내친김에 클라우드 도 한번 써봐서 편의성을 체험해봐야겠네요
|
<bean id="dataSource_APPLE"
class="org.apache.commons.dbcp.BasicDataSource"
destroy-method="close"> <property name="driverClassName"
value="com.microsoft.sqlserver.jdbc.SQLServerDriver"
/> <property name="url"
value="jdbc:sqlserver://databaseAddress;DatabaseName=APPLE"
/> <property name="username"
value="APPLE" /> <property name="password"
value="APPLEPASS" /> </bean> <bean id="dataSource_GRAPE"
class="org.apache.commons.dbcp.BasicDataSource" destroy-method="close"> <property name="driverClassName"
value="com.microsoft.sqlserver.jdbc.SQLServerDriver"
/> <property name="url"
value="jdbc:sqlserver://databaseAddress;DatabaseName=GRAPE"
/> <property name="username"
value="GRAPE" /> <property name="password"
value="GRAPEPASS" /> </bean>
|
APPLE 과 GRAPE DB 를 Threadlocal 변수에 저장하고 Lookup 하여 사용하기위에 Entry Key 를 정의한다.
|
public enum DynamicDSType { APPLE, GRAPE } |
|
public class DynamicDSContextHolder { private static final ThreadLocal<DynamicDSType> contextHolder = new ThreadLocal<DynamicDSType>(); public static void setDynamicDSType(DynamicDSType dynamicDSType){ Assert.notNull(dynamicDSType,"DynamicType
cannot be null"); contextHolder.set(dynamicDSType); } public static DynamicDSType getDynamicDSType(){ if (contextHolder.get() == null) { return DynamicDSType.APPLE; } return (DynamicDSType) contextHolder.get(); } public static void clearDynamicDSType(){ contextHolder.remove(); } } |
|
<bean id="dataSource"
class="com.common.module.DynamicRoutingDataSource"> <property name="targetDataSources"> <map key-type="com.common.module.DynamicDSType"> <entry key="APPLE"
value-ref="dataSource_APPLE"></entry> <entry key="GRAPE"
value-ref="dataSource_GRAPE"></entry> </map> </property> <property name="defaultTargetDataSource" ref="dataSource_APPLE"/> </bean> |
|
import org.springframework.jdbc.datasource.lookup.AbstractRoutingDataSource; @Override protected Object determineCurrentLookupKey() { return DynamicDSContextHolder.getDynamicDSType(); } } |
DynamicDSContextHolder.getDynamicDSType() 메서드를 Lookup 한다.
그것은 ThreadLocal 변수에서 dataSource 정보 가져와 Container 에서 사용하겠다고 정의하는 부분이다.
아래처럼 DB Connection 전에 Datasource 정보를 ContextHolder를이용하여 변경할 수 있다.
|
DynamicDSContextHolder.setDynamicDSType(DynamicDSType.APPLE); List<Item> appleItems = catalog.getItems(); |
| /** JobTask.java**/ public class JobTask { public void test(){ System.out.println("Task 실행!"); } } |
| /** JobScheduler.java**/ import org.quartz.JobExecutionContext; import org.quartz.JobExecutionException; import org.springframework.scheduling.quartz.QuartzJobBean; public class JobScheduler extends QuartzJobBean{ private JobTask jobTask; public void setJobTask(JobTask jobTask) { this.jobTask = jobTask; } @Override protected void executeInternal(JobExecutionContext arg0) throws JobExecutionException { jobTask.test(); } } |
<bean id="JobTask" class="com.apro.service.JobTask"/> |
<bean name="JobProcess" class="org.springframework.scheduling.quartz.JobDetailBean"> <property name="jobClass" value="com.apro.service.JobScheduler"/> <property name="jobDataAsMap"> <map> <entry key="JobTask" value-ref="JobTask"></entry> </map> </property> </bean> |
<bean id="cronTrigger" class="org.springframework.scheduling.quartz.CronTriggerBean"> <property name="jobDetail" ref="JobProcess"/> <property name="cronExpression" value="0/5 * * * * ?"/> </bean> |
<bean class="org.springframework.scheduling.quartz.SchedulerFactoryBean"> <property name="jobDetails"> <list> <ref bean="JobProcess"/> </list> </property> <property name="triggers"> <list> <ref bean="cronTrigger"/> </list> </property> </bean> |
댓글을 달아 주세요