package org.malagu.multitenant; import org.malagu.linq.JpaUtil; import org.malagu.linq.initiator.JpaUtilAble; import org.malagu.multitenant.domain.DataSourceInfo; import org.malagu.multitenant.service.DatabaseNameService; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.boot.autoconfigure.jdbc.DataSourceProperties; import org.springframework.context.ApplicationContext; import org.springframework.stereotype.Component; import org.springframework.transaction.annotation.Transactional; /** * @author Kevin Yang (mailto:[email protected]) * @since 2017年11月24日 */ @Component public class MasterDataSourceInitiator implements JpaUtilAble { @Autowired private DataSourceProperties properties; @Autowired private DatabaseNameService databaseNameService; @Override @Transactional public void afterPropertiesSet(ApplicationContext applicationContext) { boolean isExist = true; String master = databaseNameService.getDatabaseName(Constants.MASTER); DataSourceInfo dataSourceInfo = JpaUtil.getOne(DataSourceInfo.class, master); if (dataSourceInfo == null) { dataSourceInfo = new DataSourceInfo(); isExist = false; } dataSourceInfo.setId(master); dataSourceInfo.setDriverClassName(properties.determineDriverClassName()); dataSourceInfo.setEnabled(true); dataSourceInfo.setJndiName(properties.getJndiName()); dataSourceInfo.setName("主公司数据源"); dataSourceInfo.setUrl(properties.determineUrl()); dataSourceInfo.setUsername(properties.determineUsername()); dataSourceInfo.setPassword(properties.determinePassword()); dataSourceInfo.setShared(true); dataSourceInfo.setDepletionIndex(1); dataSourceInfo.setType(properties.getType() != null ? properties.getType().getName() : null); if (isExist) { JpaUtil.merge(dataSourceInfo); } else { JpaUtil.persist(dataSourceInfo); } } }