Commit 534da8be authored by haocao's avatar haocao
Browse files

sharding-jdbc-spring-boot-starter 3th version.

parent a89c95a0
Loading
Loading
Loading
Loading
+47 −0
Original line number Diff line number Diff line
package io.shardingjdbc.spring.boot.masterslave;
package io.shardingjdbc.spring.boot;

import io.shardingjdbc.core.api.MasterSlaveDataSourceFactory;
import io.shardingjdbc.core.api.ShardingDataSourceFactory;
import io.shardingjdbc.spring.boot.masterslave.SpringBootMasterSlaveRuleConfigurationProperties;
import io.shardingjdbc.spring.boot.sharding.SpringBootShardingRuleConfigurationProperties;
import io.shardingjdbc.spring.boot.util.EnvironmentAwareUtil;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.context.properties.EnableConfigurationProperties;
@@ -15,22 +18,26 @@ import java.util.HashMap;
import java.util.Map;

/**
 * Spring boot master slave rule configuration.
 * Spring boot sharding and master-slave configuration.
 *
 * @author caohao
 */
@Configuration
@EnableConfigurationProperties(SpringBootMasterSlaveRuleConfigurationProperties.class)
public class SpringBootMasterSlaveConfiguration implements EnvironmentAware {
@EnableConfigurationProperties({SpringBootShardingRuleConfigurationProperties.class, SpringBootMasterSlaveRuleConfigurationProperties.class})
public class SpringBootConfiguration implements EnvironmentAware {
    
    @Autowired
    private SpringBootMasterSlaveRuleConfigurationProperties properties;
    private SpringBootShardingRuleConfigurationProperties shardingProperties;
    
    @Autowired
    private SpringBootMasterSlaveRuleConfigurationProperties masterSlaveProperties;
    
    private Map<String, DataSource> dataSourceMap = new HashMap<>();
    
    @Bean
    public DataSource dataSource() throws SQLException {
        return MasterSlaveDataSourceFactory.createDataSource(dataSourceMap, properties.getMasterSlaveRuleConfiguration());
        return null == masterSlaveProperties.getMasterDataSourceName() ? ShardingDataSourceFactory.createDataSource(dataSourceMap, shardingProperties.getShardingRuleConfiguration())
                : MasterSlaveDataSourceFactory.createDataSource(dataSourceMap, masterSlaveProperties.getMasterSlaveRuleConfiguration());
    }
    
    @Override
+0 −40
Original line number Diff line number Diff line
package io.shardingjdbc.spring.boot.sharding;

import io.shardingjdbc.core.api.ShardingDataSourceFactory;
import io.shardingjdbc.spring.boot.util.EnvironmentAwareUtil;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.context.properties.EnableConfigurationProperties;
import org.springframework.context.EnvironmentAware;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.core.env.Environment;

import javax.sql.DataSource;
import java.sql.SQLException;
import java.util.HashMap;
import java.util.Map;

/**
 * Sharding jdbc spring boot configuration.
 *
 * @author caohao
 */
@Configuration
@EnableConfigurationProperties(SpringBootShardingRuleConfigurationProperties.class)
public class SpringBootShardingConfiguration implements EnvironmentAware {
    
    @Autowired
    private SpringBootShardingRuleConfigurationProperties properties;
    
    private Map<String, DataSource> dataSourceMap = new HashMap<>();
    
    @Bean
    public DataSource dataSource() throws SQLException {
        return ShardingDataSourceFactory.createDataSource(dataSourceMap, properties.getShardingRuleConfiguration());
    }
    
    @Override
    public void setEnvironment(final Environment environment) {
        EnvironmentAwareUtil.setDataSourceMap(dataSourceMap, environment);
    }
}
+1 −2
Original line number Diff line number Diff line
org.springframework.boot.autoconfigure.EnableAutoConfiguration=\
io.shardingjdbc.spring.boot.sharding.SpringBootShardingConfiguration,\
io.shardingjdbc.spring.boot.masterslave.SpringBootMasterSlaveConfiguration
 No newline at end of file
io.shardingjdbc.spring.boot.SpringBootConfiguration
 No newline at end of file
+32 −0
Original line number Diff line number Diff line
/*
 * Copyright 1999-2015 dangdang.com.
 * <p>
 * Licensed under the Apache License, Version 2.0 (the "License");
 * you may not use this file except in compliance with the License.
 * You may obtain a copy of the License at
 * 
 *      http://www.apache.org/licenses/LICENSE-2.0
 * 
 * Unless required by applicable law or agreed to in writing, software
 * distributed under the License is distributed on an "AS IS" BASIS,
 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 * See the License for the specific language governing permissions and
 * limitations under the License.
 * </p>
 */

package io.shardingjdbc.spring.boot;

import io.shardingjdbc.spring.boot.type.SpringBootMasterSlaveTest;
import io.shardingjdbc.spring.boot.type.SpringBootShardingTest;
import org.junit.runner.RunWith;
import org.junit.runners.Suite;
import org.junit.runners.Suite.SuiteClasses;

@RunWith(Suite.class)
@SuiteClasses({
        SpringBootMasterSlaveTest.class,
        SpringBootShardingTest.class 
    })
public class AllSpringBootTests {
}
+28 −0
Original line number Diff line number Diff line
package io.shardingjdbc.spring.boot.type;

import io.shardingjdbc.core.jdbc.core.datasource.MasterSlaveDataSource;
import io.shardingjdbc.spring.boot.SpringBootMain;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.test.context.SpringBootTest;
import org.springframework.test.context.ActiveProfiles;
import org.springframework.test.context.junit4.SpringJUnit4ClassRunner;

import javax.sql.DataSource;

import static org.junit.Assert.assertTrue;

@RunWith(SpringJUnit4ClassRunner.class)
@SpringBootTest(classes = SpringBootMain.class)
@ActiveProfiles("masterslave")
public class SpringBootMasterSlaveTest {
    
    @Autowired
    private DataSource dataSource;
    
    @Test
    public void testWithMasterSlaveDataSource() {
        assertTrue(dataSource instanceof MasterSlaveDataSource);
    }
}
Loading