Saya menggunakan Spring Boot untuk mengembangkan dua aplikasi, satu berfungsi sebagai server dan yang lainnya adalah aplikasi klien. Namun, keduanya adalah aplikasi yang sama yang berfungsi berbeda berdasarkan profil aktif. Saya menggunakan fitur konfigurasi otomatis Spring Boot untuk mengkonfigurasi aplikasi saya.
Saya ingin menonaktifkan semua konfigurasi otomatis terkait database di aplikasi klien, karena tidak memerlukan koneksi database. Aplikasi tidak boleh mencoba membuat koneksi dengan database, atau mencoba menggunakan fitur Spring Data atau Hibernate. Pengaktifan atau penonaktifan konfigurasi otomatis database harus bersyarat dan berdasarkan pada profil aktif aplikasi.
Dapatkah saya mencapai ini dengan membuat dua file application.properties yang berbeda untuk masing-masing profil?
Saya mencoba menambahkan ini ke file properti saya,
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
Namun, aplikasi masih mencoba untuk terhubung ke database saat dimulai. Apakah pengecualian tersebut cukup untuk memenuhi kebutuhan saya?
Jawaban:
Cara saya melakukan hal serupa adalah:
Tulis yang serupa untuk aplikasi server (tanpa pengecualian).
Langkah terakhir adalah menonaktifkan Konfigurasi Otomatis dari kelas boot musim semi utama:
Ubah:
@SpringBootApplication
menjadi:Ini harus melakukan pekerjaan itu. Sekarang, dependensi yang saya kecualikan dalam contoh mungkin tidak lengkap. Mereka sudah cukup bagi saya, tetapi saya tidak yakin apakah itu semua untuk sepenuhnya menonaktifkan pustaka terkait database. Periksa daftar di bawah untuk memastikan:
http://docs.spring.io/spring-boot/docs/current-SNAPSHOT/reference/htmlsingle/#auto-configuration-classes
Semoga membantu
sumber
@SpringBootApplication
memilikiexclude
properti, tidak perluClientAppConfiguration
.@SpringBootApplication
, dan kemudian di paket tertentu, membuat@Configuration
kelas yang melakukan salah@Import
satu kelas yang relevan dan bergantung pada@Profile
atau@Conditional
. Dengan begitu, Anda dapat menguji setiap lapisan aplikasi tanpa autoconfig bocor di seluruh aplikasi. Ingin menguji DB? Cukup pindai paket DB, konfigurasikan DB tiruan, dan Anda siap melakukannya.Untuk menonaktifkan semua konfigurasi otomatis database terkait dan keluar dari:
1. Menggunakan anotasi:
2. Menggunakan Application.properties:
sumber
Sepertinya Anda baru saja lupa koma untuk memisahkan kelas. Jadi berdasarkan konfigurasi Anda, berikut ini akan berfungsi:
Sebagai alternatif, Anda juga bisa mendefinisikannya sebagai berikut:
sumber
Ada cara untuk mengecualikan kelas konfigurasi otomatis tertentu menggunakan
@SpringBootApplication
anotasi.@SpringBootApplication#exclude
atribut adalah alias untuk@EnableAutoConfiguration#exclude
atribut dan saya merasa agak praktis dan berguna.Saya menambahkan
@Import(MyPersistenceConfiguration.class)
contoh untuk mendemonstrasikan bagaimana Anda dapat menerapkan konfigurasi database kustom Anda.sumber
Jalan keluar bagi saya adalah menambahkan
anotasi ke kelas yang menjalankan Spring boot (ditandai dengan `@SpringBootApplication).
Akhirnya, ini terlihat seperti:
sumber
Cara lain untuk mengontrolnya melalui Profil adalah:
sumber
Saya memiliki masalah yang sama di sini, diselesaikan seperti ini:
Cukup tambahkan yang lain di
application-{yourprofile}.yml
mana "profil Anda" bisa menjadi "klien".Dalam kasus saya, saya hanya ingin menghapus Redis di profil Dev, jadi saya menambahkan di
application-dev.yml
sebelah utamaapplication.yml
dan itu berhasil.Dalam file ini saya meletakkan:
Saya menyukai kenyataan bahwa tidak perlu mengubah kode aplikasi untuk melakukan itu.
sumber
Saya mendapatkan kesalahan ini bahkan jika saya melakukan semua solusi yang disebutkan di atas.
Di beberapa titik ketika saya mencari POM, ada ketergantungan di dalamnya
Dan kelas Pojo memiliki impor berikut
import javax.persistence.Entity; import javax.persistence.GeneratedValue; import javax.persistence.Id;
Yang dengan jelas menunjukkan aplikasi mengharapkan sumber data.
Yang saya lakukan adalah menghapus ketergantungan JPA dari pom dan mengganti impor untuk pojo dengan yang berikut ini sekali
import org.springframework.data.annotation.Id; import org.springframework.data.mongodb.core.mapping.Document;
Akhirnya saya mendapatkan build yang SUKSES. Lihat, Anda mungkin mengalami masalah yang sama
sumber
Saya menambahkan myApp.java, setelah @SpringBootApplication
Dan berubah
Jadi, saya memiliki ini di kelas utama saya (myApp.java)
}
Dan bekerja untukku! =)
sumber