@Configuration中@Autowired private DataSource rabbitProducerDataSource;

@Configuration中@Autowired private DataSource rabbitProducerDataSource;

1
@Slf4j<br>@Configuration<br>@PropertySource({"classpath:rabbit-producer-message.properties"})<br>public class RabbitProducerDataSourceConfiguration {<br><br>   /**赋值*/<br>   @Value("${rabbit.producer.druid.type}")<br>   private Class<? extends DataSource> dataSourceType;<br><br>   /**给DataSource rabbitProducerDataSource 起个名字*/<br>   @Bean(name ="rabbitProducerDataSource")<br><br><br>   /*<br>    Spring boot有多个数据源时, 必须有一个是primary的, 否则无法启动.<br>     一般我们设置某个bean为primary时, 是添加primary注解<br>    */<br>   @ConfigurationProperties(prefix = "rabbit.producer.druid.jdbc")<br>   public DataSource rabbitProducerDataSource() throws SQLException {<br>      DataSource rabbitProducerDataSource = DataSourceBuilder.create().type(dataSourceType).build();<br>      log.info("============= rabbitProducerDataSource : {} ================", rabbitProducerDataSource);<br>      return rabbitProducerDataSource;<br>   }<br><br>   public DataSourceProperties primaryDataSourceProperties(){<br>      return new DataSourceProperties();<br>   }<br><br>   /**用于备份*/<br>   public DataSource primaryDataSource(){<br>      return primaryDataSourceProperties().initializeDataSourceBuilder().build();<br>   }<br><br>}<br>
1
@Configuration<br>@AutoConfigureAfter(value = {RabbitProducerDataSourceConfiguration.class})<br>public class RabbitProducerMyBatisConfiguration {<br><br>   @Resource(name= "rabbitProducerDataSource")<br>   private DataSource rabbitProducerDataSource;<br><br>   @Bean(name="rabbitProducerSqlSessionFactory")            //自动注入上面 private DataSource rabbitProducerDataSource 入参<br>   public SqlSessionFactory rabbitProducerSqlSessionFactory(DataSource rabbitProducerDataSource) {<br>      <br>      SqlSessionFactoryBean bean = new SqlSessionFactoryBean();<br>      bean.setDataSource(rabbitProducerDataSource);<br>      ResourcePatternResolver resolver = new PathMatchingResourcePatternResolver();<br>      try {<br>         bean.setMapperLocations(resolver.getResources("classpath:mapper/*.xml"));<br>         SqlSessionFactory sqlSessionFactory = bean.getObject();<br>         if (sqlSessionFactory != null) {<br>            sqlSessionFactory.getConfiguration().setCacheEnabled(Boolean.TRUE);<br>         }<br>         return sqlSessionFactory;<br>      } catch (Exception e) {<br>         throw new RuntimeException(e);<br>      }<br>   }<br>   <br>   @Bean(name="rabbitProducerSqlSessionTemplate")<br>   public SqlSessionTemplate rabbitProducerSqlSessionTemplate(SqlSessionFactory sqlSessionFactory) {<br>      return new SqlSessionTemplate(sqlSessionFactory);<br>   }<br>   <br>}<br>
1
@Configuration<br>public class BrokerMessageConfiguration {<br><br>    @Autowired<br>    private DataSource rabbitProducerDataSource;<br><br>    /**sql 脚本*/<br>    @Value("classpath:rabbit-producer-message-schema.sql")<br>    private Resource schemaScript;<br>    <br>    @Bean<br>    public DataSourceInitializer initDataSourceInitializer() {<br>       System.err.println("--------------rabbitProducerDataSource-----------:" + rabbitProducerDataSource);<br>        final DataSourceInitializer initializer = new DataSourceInitializer();<br>        //set数据源 创建jdbc 连接<br>        initializer.setDataSource(rabbitProducerDataSource);<br>        //执行脚本sql语句   (填充器)<br>        initializer.setDatabasePopulator(databasePopulator());<br>        return initializer;<br>    }<br><br>    private DatabasePopulator databasePopulator() {<br>        final ResourceDatabasePopulator populator = new ResourceDatabasePopulator();<br>        populator.addScript(schemaScript);<br>        return populator;<br>    }<br>}<br>

这里有三个@Configuration修饰的类, 

1
@Configuration<br>@AutoConfigureAfter(value = {RabbitProducerDataSourceConfiguration.class})<br>public class RabbitProducerMyBatisConfiguration {<br>//此类在 加载前有条件 @AutoConfigureAfter(value = {RabbitProducerDataSourceConfiguration.class})<br>要等到这个配置类先加载 然后在执行 这样能保证  @Resource(name= "rabbitProducerDataSource") 可以被注入<br><br> @Resource(name= "rabbitProducerDataSource")<br>   private DataSource rabbitProducerDataSource;<br><br>....<br>....<br>...<br><br>}<br>
1
@Configuration<br>public class BrokerMessageConfiguration {<br>//此类为什么不加 @AutoConfigureAfter(value = {RabbitProducerDataSourceConfiguration.class})<br>能保证@Autowired 注入的数据源是 RabbitProducerDataSourceConfiguration 这个类声明的<br> @Bean(name ="rabbitProducerDataSource")<br><br><br>    @Autowired<br>    private DataSource rabbitProducerDataSource;<br>}<br>

还请希望详细解答一下

正在回答 回答被采纳积分+1

登陆购买课程后可参与讨论,去登陆

1回答
阿神 2021-04-05 11:42:42

configuration注解主要是一个陪着(类似spring的xml),小伙伴可以把问题描述清楚一些

  • 提问者 uareRight #1

    看了源码找到了问题,简易阿神看看源码 ,这样能更好的在视频里给小伙伴讲明白,而不是随便一说

    2021-04-08 18:39:12
  • 提问者 uareRight #2

    看了源码找到了问题,建议阿神看看源码 ,这样能更好的在视频里给小伙伴讲明白,而不是随便一说

    2021-04-08 18:39:48
问题已解决,确定采纳
还有疑问,暂不采纳

恭喜解决一个难题,获得1积分~

来为老师/同学的回答评分吧

0 星
请稍等 ...
微信客服

购课补贴
联系客服咨询优惠详情

帮助反馈 APP下载

慕课网APP
您的移动学习伙伴

公众号

扫描二维码
关注慕课网微信公众号

在线咨询

领取优惠

免费试听

领取大纲

扫描二维码,添加
你的专属老师
插入代码