@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> |
还请希望详细解答一下
25
收起
恭喜解决一个难题,获得1积分~
来为老师/同学的回答评分吧