У меня есть приложение на SpringBoot 2.x
@SpringBootConfiguration
@EnableAutoConfiguration
@ComponentScan
public class WebSpringBootJarApplication extends SpringBootServletInitializer implements WebApplicationInitializer {
public static void main(String[] args) {
SpringApplication.run(WebSpringBootJarApplication.class, args);
}
@Override
protected SpringApplicationBuilder configure(SpringApplicationBuilder builder) {
return builder.sources(WebSpringBootJarApplication.class);
}
}
pom. xml
<parent>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>2.2.4.RELEASE</version>
<relativePath/> <!-- lookup parent from repository -->
</parent>
<groupId>weblogic.war.spring.boot</groupId>
<artifactId>weblogic-war-spring-boot</artifactId>
<version>0.0.1-SNAPSHOT</version>
<name>weblogic-war-spring-boot</name>
<packaging>war</packaging>
Это класс, который должен быть автоматически подключен ...
@Service
public class CompanyReadServiceImpl implements CompanyReadService {
private CompanyMapper companyMapper;
private CompanyReadRepository companyReadRepository;
@Autowired
public CompanyReadServiceImpl(CompanyMapper companyMapper,
CompanyReadRepository companyReadRepository) {
this.companyMapper = companyMapper;
this.companyReadRepository = companyReadRepository;
}
@Transactional
@Override
public CompanyDto getById(Long id) {
Company company = find(id);
return transform(company);
}
@Transactional
@Override
public boolean isByName(String name) {
return this.companyReadRepository.findByName(name).isPresent();
}
@Transactional
@Override
public CompanyDto getByName(String name) {
Company company = companyReadRepository.findByName(name).orElse(new Company());
return transform(company);
}
private Company find(Long id){
return this.companyReadRepository.findById(id).orElseThrow(() -> new RuntimeException("User not found"));
}
private CompanyDto transform(Company company){
return this.companyMapper.companyToCompanyDto(company);
}
}
pom. xml
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-test</artifactId>
<scope>test</scope>
</dependency>
update
Этот класс из аналогичного проекта, и он работает (но идея Intellij помечает поля как ошибки )
в src / test / java / weblogic / war / spring / boot / service / read / CompanyReadServiceTest. java
@RunWith(SpringRunner.class)
@SpringBootTest
public class CompanyReadServiceTest {
private static final Logger LOGGER = LoggerFactory.getLogger(CompanyReadServiceTest.class);
private static String NAME_METHOD_READ_BY_NAME_BOOLEAN = "isByName";
@Autowired
private CompanyReadRepository companyReadRepository;
@Autowired
private CompanyReadService companyReadService;
@Autowired
private CompanyReadRepositoryTest companyReadRepositoryTest;
@Autowired
private CompanyMapper companyMapper;
@Test
public void getById() {
Company lastEntry = getLastEntry();
Long idExpected = null;
if(lastEntry != null) idExpected = lastEntry.getId();
if(idExpected != null){
CompanyDto companyDto = searchByIdEntry(idExpected);
Long idActual = companyDto.getId();
Assert.assertEquals("Lookup of entry - failed!!!", idExpected, idActual );
}
}
@Test
public void isByName() {
Company lastEntry = getLastEntry();
String name = null;
if(lastEntry != null) name = lastEntry.getName();
if(name != null){
boolean entryByName = isEntryByName(name);
Assert.assertTrue("Lookup of entry - failed", entryByName);
}
}
private CompanyDto searchByIdEntry(Long id){
return this.companyReadService.getById(id);
}
private boolean isEntryByName(String name){
return getByNameReflection(companyReadService, NAME_METHOD_READ_BY_NAME_BOOLEAN, name);
}
private Company getLastEntry() {
Optional<Company> lastEntry = companyReadRepositoryTest.getLastEntry();
return lastEntry.orElse(null);
}
}
Я делаю скопировать проект.
update_2
Я очистил локальное хранилище Maven. В среде IDE также (во время компиляции) выделяются поля, которые предположительно не подключены автоматически. но я провожу тестовый класс, и он работает ...
Почему? (Это могло начаться, когда я просто переименовал пакет и отредактировал pom. xml)
Автоматическое подключение хорошо работает в рабочей области приложения. но это не работает в области тестирования приложения.
Кто может поделиться идеями по этому вопросу?