Spring-boot統合pg、monto多データ源過程詳細解


この文章は主にSpring-boot統合pg、mongoマルチデータソースの過程を紹介しています。例コードを通して紹介された非常に詳細で、皆さんの学習や仕事に対して一定の参考学習価値を持っています。必要な友達は以下のように参照してください。
POMファイルを修正し、対応するJarパッケージを追加します。

<dependency>
		<groupId>org.springframework.boot</groupId>
		<artifactId>spring-boot-starter-data-mongodb</artifactId>
	</dependency>
<dependency>
		<groupId>org.postgresql</groupId>
		<artifactId>postgresql</artifactId>
		<scope>runtime</scope>
	</dependency>
<dependency>
		<groupId>org.springframework.boot</groupId>
		<artifactId>spring-boot-starter-jdbc</artifactId>
</dependency>
スタートクラスを変更して、元のデータソースの自動ローディング機構を削除します。

@SpringBootApplication(
    exclude = {DataSourceAutoConfiguration.class, 
          PageHelperAutoConfiguration.class ,
    		  MongoAutoConfiguration.class, MongoDataAutoConfiguration.class//         
    })
@EnableEurekaClient
public class MainApplication {、、、
appication.ymlファイルを作成し、設定情報を追加します。

spring:
  #    postgreSQL 
 datasource:
  pg:
   url: jdbc:postgresql://127.0.0.1:5432/pgdb
   username: us_wu
   password: netcool@919
   driver-class-name: org.postgresql.Driver
  mg:
   host: 127.0.0.1
   username: aaa
   password: aaa
   database: mgdb
   port: 27017
それぞれ手動でPG、モンゴのデータソースを追加し、使用サンプル例
pg。
1、データソースを手動で読み込む

@Configuration
public class DataSourceConfig {
  final String cmspg="spring.datasource.pg";

  @Bean(name = "pgDS")
  @ConfigurationProperties(prefix =pg) 
  public DataSource dataSource() {
    return DataSourceBuilder.create().build();
  }
2、pgプロファイルを作成し、Sql Session FactoryとスキャンするDaoを指定します。

@Configuration
@MapperScan(basePackages = {"com.**.mapper.pg"}, sqlSessionFactoryRef = "sqlSessionFactory")
public class PostgresDBConfig {

  @Autowired
  @Qualifier("pgDS")
  private DataSource pgDS;


  @Bean
  public SqlSessionFactory sqlSessionFactory() throws Exception {
    SqlSessionFactoryBean factoryBean = new SqlSessionFactoryBean();
    factoryBean.setDataSource(pgDS);  
    return factoryBean.getObject();

  }
  @Bean
  public SqlSessionTemplate sqlSessionTemplate() throws Exception {
    SqlSessionTemplate template = new SqlSessionTemplate(sqlSessionFactory()); //        Factory
    return template;
  }
}
3、Daoを作成する--注釈形式

@Repository
@Mapper
public interface StCableFiberMapper {

  @Select("SELECT * FROM st_cable_fiber WHERE id = #{id}")
  St_cable_fiber findById(@Param("id") String id);
モンゴ
1、モノモンの配置情報をロードする

public abstract class AbstractMongoConfigure {

		private String host, database, username, password;
		private int port;
		// Setter methods go here..
	 
		/*
		 * Method that creates MongoDbFactory Common to both of the MongoDb
		 * connections
		 */
		public MongoDbFactory mongoDbFactory() throws Exception {
			ServerAddress serverAddress = new ServerAddress(host, port);
			List<MongoCredential> mongoCredentialList = new ArrayList<>();
			mongoCredentialList.add(MongoCredential.createScramSha1Credential(username, database, password.toCharArray()));
			return new SimpleMongoDbFactory(new MongoClient(serverAddress,mongoCredentialList), database);
		}
	 
		/*
		 * Factory method to create the MongoTemplate
		 */
		abstract public MongoTemplate getMongoTemplate() throws Exception;
}

@Configuration
@EnableMongoRepositories(basePackages = {"com.**.mapper.mg"},mongoTemplateRef = "mongoTemplate") 
@ComponentScan
@ConfigurationProperties(prefix = "spring.datasource.mg")
public class MongoMasterConfig extends AbstractMongoConfigure{

	@Override
	@Bean("mongoTemplate")
	public MongoTemplate getMongoTemplate() throws Exception {
		return new MongoTemplate(mongoDbFactory()); 
	}

}
Dao Mongo Templateモードを作成

@Repository
public class CmCableDetailRepo{

	@Autowired
	private MongoTemplate mongoTemplate;

	public Page<Cm_Cable> findByLevelAndName(String areacode, int level,String name,int pageNum, int pageSize){

		PageRequest page = new PageRequest(pageNum, pageSize);
		Query query = new Query();
		Criteria criteria = new Criteria();
		criteria.and("areacode").regex("^"+areacode);
		if(level > -1){
			criteria.and("cableSegment_level").is(level);
		}
		if(null != name && name.trim().length() > 0){
			criteria.and("zh_label").regex(".*?"+name+".*");
		}
		query.addCriteria(criteria);
		Long count = mongoTemplate.count(query, Cm_Cable.class);

		List<Cm_Cable> list = mongoTemplate.find(query.with(page), Cm_Cable.class);
		return new PageImpl<Cm_Cable>(list, page, count);
	}
Mongo Repositoryモード

@Repository
public interface CmCableDetailMapper extends MongoRepository<Cm_Cable, String>{
}
以上が本文の全部です。皆さんの勉強に役に立つように、私たちを応援してください。