Я использую Spring Boot для разработки двух приложений, одно служит сервером, а другое - клиентским приложением. Однако оба они представляют собой одно и то же приложение, которое работает по-разному в зависимости от активного профиля. Я использую функцию автоматической настройки Spring Boot для настройки своих приложений.
Я хочу отключить всю автоматическую конфигурацию, связанную с базой данных, в клиентском приложении, поскольку для этого не потребуется подключение к базе данных. Приложение не должно пытаться установить соединение с базой данных или пытаться использовать какие-либо функции Spring Data или Hibernate. Включение или отключение автоконфигурации базы данных должно быть условным и основываться на активном профиле приложения.
Могу ли я добиться этого, создав два разных файла application.properties для соответствующих профилей?
Я попытался добавить это в свой файл свойств,
spring.autoconfigure.exclude=org.springframework.boot.autoconfigure.orm.jpa.HibernateJpaAutoConfiguration\
org.springframework.boot.autoconfigure.jdbc.DataSourceAutoConfiguration\
org.springframework.boot.autoconfigure.jdbc.DataSourceTransactionManagerAutoConfiguration\
org.springframework.boot.autoconfigure.data.web.SpringDataWebAutoConfiguration
Но приложение все равно пытается подключиться к базе данных при запуске. Достаточно ли этих исключений для выполнения моих требований?
Ответы:
Я бы сделал то же самое:
Напишите аналогичный для серверного приложения (без исключений).
Последний шаг - отключить автоматическую настройку из основного загрузочного класса Spring:
Изменить:
@SpringBootApplication
на:Это должно сработать. Теперь зависимости, которые я исключил в примере, могут быть неполными. Мне их было достаточно, но я не уверен, что все это может полностью отключить библиотеки, связанные с базами данных. Проверьте список ниже, чтобы убедиться:
http://docs.spring.io/spring-boot/docs/current-SNAPSHOT/reference/htmlsingle/#auto-configuration-classes
надеюсь, это поможет
источник
@SpringBootApplication
естьexclude
собственность, в которой нет необходимостиClientAppConfiguration
.@SpringBootApplication
, а затем в конкретном пакете создать@Configuration
класс, который выполняет один@Import
из соответствующих классов и зависит от@Profile
или@Conditional
. Таким образом, вы можете протестировать каждый уровень приложения без утечки автоконфигурации по всему приложению. Хотите протестировать БД? Просто просканируйте пакет БД, настройте фиктивную БД, и все готово.Для отключения всей автоконфигурации, связанной с базой данных, и выхода из:
1. Использование аннотации:
2. Использование Application.properties:
источник
Похоже, вы просто забыли запятую для разделения классов. Итак, в зависимости от вашей конфигурации будет работать следующее:
В качестве альтернативы вы также можете определить его следующим образом:
источник
Есть способ исключить определенные классы автоконфигурации с помощью
@SpringBootApplication
аннотации.@SpringBootApplication#exclude
attribute - это псевдоним@EnableAutoConfiguration#exclude
атрибута, и я считаю его довольно удобным и полезным.Я добавил
@Import(MyPersistenceConfiguration.class)
в пример, чтобы продемонстрировать, как вы можете применить свою настраиваемую конфигурацию базы данных.источник
Выходом для меня было добавить
аннотация к классу, запускающему загрузку Spring (помечена как @SpringBootApplication).
Наконец, это выглядит так:
источник
Еще один способ управлять им через профили:
источник
У меня была такая же проблема, решаемая вот так:
Просто добавьте еще один,
application-{yourprofile}.yml
где yourprofile может быть client.В моем случае я просто хотел удалить Redis в профиле разработчика, поэтому я добавил
application-dev.yml
рядом с основным,application.yml
и он выполнил свою работу.В этот файл я положил:
Мне нравится, что для этого не нужно менять код приложения.
источник
Я получал эту ошибку, даже если выполнил все упомянутые выше решения.
В какой-то момент, когда я смотрю POM, в нем была эта зависимость
И класс Pojo имел следующий импорт
import javax.persistence.Entity; import javax.persistence.GeneratedValue; import javax.persistence.Id;
Это ясно показывает, что приложение ожидало источник данных.
Что я сделал, так это удалил зависимость JPA от pom и заменил импорт для pojo следующим один раз
import org.springframework.data.annotation.Id; import org.springframework.data.mongodb.core.mapping.Document;
Наконец-то у меня получилась УСПЕШНАЯ сборка. Проверьте это, возможно, вы столкнулись с той же проблемой
источник
Я добавляю в myApp.java после @SpringBootApplication
И изменил
Итак, у меня это есть в моем основном классе (myApp.java)
}
И работай на меня! знак равно
источник