клиент конфигурации Spring Cloud не вводит свойства, когда присутствует MyBatis @MapperScan

У меня есть приложение с весенней загрузкой с 3 @Configuration аннотированными классами: Application, DBScannerConfig и ElasticSearchConfiguration. Мое приложение также использует конфигурацию с сервера Spring Cloud Config.

Проблема в том, что когда я пытаюсь аннотировать атрибуты с помощью @Value("${key}") внутри класса DBScannerConfig, свойства не внедряются. Однако, если я использую аннотацию @Value("${key}") в двух других классах, конфигурация работает хорошо.

Я действительно думаю, что это может быть связано с аннотацией @MapperScan, присутствующей в моем классе конфигурации DBScannerConfig.

Я хотел бы либо получить свойства, либо источник данных autowire spring в моем аннотированном классе @MapperScan, но я не могу добиться этого.

Кто-нибудь сталкивался с этой проблемой раньше? Вот код:

Application.java

@SpringBootApplication
@EnableElasticsearchRepositories("org.myapp.elastic.repository")
@ComponentScan(basePackages = {"org.myapp"})
public class Application extends WebSecurityConfigurerAdapter {

    private static final Logger LOGGER = LoggerFactory.getLogger(Application.class);

//    @Autowired
//    DataSource dataSource;

    public static void main(String[] args) {
        SpringApplication.run(Application.class, args);

    }

//Other Stuff for Spring Security
}

DBScannerConfig.java

@Configuration
@MapperScan("org.myapp.persistence.mapper")
public class DBScannerConfig{

    @Autowired
    DataSource dataSource;

    @Bean(name = "mySqlSessionFactory")
    public SqlSessionFactory mySqlSessionFactory() {
        SqlSessionFactoryBean sessionFactory = new SqlSessionFactoryBean();
        sessionFactory.setDataSource(dataSource);
        sessionFactory.setTypeAliasesPackage("org.myapp.persistence.entity");
        SqlSessionFactory sqlSessionFactory = null;
        try {
            sqlSessionFactory = sessionFactory.getObject();
        } catch (Exception e) {
            LOGGER.error("Error creating mySqlSessionFactory", e);
        }
        return sqlSessionFactory;
    }
}

Если я раскомментирую источник данных @Autowired в Application.java, я получу действительный объект. Однако в DBScannerConfig.java я получаю значение NULL.

Я попытался автоматически связать объект Datasource внутри моего класса Application.java, а затем безуспешно использовать его в DBSCannerConfig.java. Как только я добавляю аннотацию @MapperScan в класс Application.java, он перестает автоматически связывать источник данных Spring.


person Emilio Garcia    schedule 21.12.2015    source источник
comment
Слишком общий, вы должны добавить некоторые подробности о том, как вы определяете bean. XML, JavaConf?   -  person snovelli    schedule 21.12.2015
comment
это конфигурация на основе Java. позвольте мне отредактировать запись с некоторыми фрагментами кода   -  person Emilio Garcia    schedule 21.12.2015
comment
Зачем нужен менеджер транзакций? Spring Boot уже настраивает его. Вставьте источник данных в свой метод вместо класса, то есть mySqlSessionFactory(DataSource dataSource). Также не вызывайте getObject, а просто верните SqlSessionFactoryBean таким образом, Spring будет контролировать вашу фабрику.   -  person M. Deinum    schedule 21.12.2015
comment
это действительно имеет значение? Я имею в виду, как вы думаете, изменение этого решит проблему с тем, что объект DataSource не подключается автоматически?   -  person Emilio Garcia    schedule 21.12.2015
comment
Я кое-что понял по этой ссылке: stackoverflow.com/questions/ 17512596/   -  person Emilio Garcia    schedule 22.12.2015