Я создал мультимодульный проект maven, который содержит модуль library
(приложение для начальной загрузки с пружиной) и модуль application
(приложение для загрузки с пружиной, включившее library
в качестве зависимости).
Это это структура моего проекта:
.
├── application
│ ├── pom.xml
│ └── src
│ ├── main
│ │ ├── kotlin
│ │ │ └── com
│ │ │ └── application
│ │ │ ├── ApplicationService.kt
│ │ │ └── Application.kt
│ │ └── resources
│ │ └── application.properties
│ └── test
│ └── kotlin
│ └── com
│ └── application
│ └── ApplicationServiceTest.kt
├── library
│ ├── pom.xml
│ └── src
│ └── main
│ ├── kotlin
│ │ └── com
│ │ └── application
│ │ ├── LibraryService.kt
│ │ └── Properties.kt
│ └── resources
│ ├── META-INF
│ │ └── spring.factories
│ └── config
│ └── application.properties
└── pom.xml
library /.../ Properties.kt:
@ConfigurationProperties("properties")
class Properties {
lateinit var name: String
}
library /.../ LibraryService.kt:
@Service
@EnableConfigurationProperties(Properties::class)
class LibraryService(private val properties: Properties) {
fun name() = properties.name
}
library /.../ spring.factories:
org.springframework.boot.autoconfigure.EnableAutoConfiguration=com.application.LibraryService
library /.../ config / application.properties:
properties.name=library
application /.../ Application.kt
@SpringBootApplication
class Application
fun main(args: Array<String>) {
runApplication<Application>(*args)
}
application / ... /ApplicationService.kt
@Service
class ApplicationService(private val libraryService: LibraryService) {
fun call() = libraryService.name()
}
application /.../ application.properties
properties.name=application
Итак, у меня есть модуль library
, где Я положил application.properties
файл с параметром по умолчанию properties.name=library
. Модуль library
имеет класс Property
, введенный в LibraryService
. LibraryService
имеет простой метод name()
, который просто возвращает значение из свойства. У меня также есть модуль application
, где я использую LibraryService
в ApplicationService
и вызываю функцию name()
, но у меня есть модуль application.properties
в application
, где properties.name=application
.
Я ожидаю, что application's
properties.name=application
переопределяет library's
properties.name=library
и ApplicationService::call
должно возвращать значение application
вместо значения по умолчанию library
в properties.name
в library module
. Но этого не происходит. ApplicationService::call
возвращает значение library
.
Я создал простой тест junit для воспроизведения этого поведения ( ApplicationServiceTest.kt ):
@SpringBootTest
class ApplicationServiceTest {
@Autowired
lateinit var applicationService: ApplicationService
@Test
fun test() {
println(applicationService.call())
}
}
Он печатает library
, Я хотел бы иметь следующее поведение: library
имеет несколько определенных свойств по умолчанию, но я хочу иметь возможность переопределить некоторые из этих свойств в application
. Как этого добиться?
исходный код: https://github.com/grolegor/maven-multi-module-spring-starter