Làm cách nào để cấu hình ứng dụng Khởi động mùa xuân của mình để chạy thử nghiệm đơn vị nó sẽ sử dụng cơ sở dữ liệu trong bộ nhớ như H2/HSQL. cơ sở dữ liệu sản xuất [Postgre/MySQL]?Cấu hình cụ thể trong cơ sở dữ liệu bộ nhớ cho mục đích thử nghiệm trong Spring
Trả lời
Cấu hình mùa xuân có thể được sử dụng cho việc này. Đây sẽ là một cách cụ thể:
Có môi trường thuộc tính tập tin cụ thể:
application.properties:
spring.profiles.active: dev
application-dev.properties
spring.jpa.database: MYSQL
spring.jpa.hibernate.ddl-auto: update
spring.datasource.url: jdbc:mysql://localhost:3306/dbname
spring.datasource.username: username
spring.datasource.password: password
ứng dụng -test.properties
spring.jpa.database: HSQL
Có cả MySQL và trình điều khiển H2 trong pom.xml
, như thế này:
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<scope>runtime</scope>
</dependency>
<dependency>
<groupId>org.hsqldb</groupId>
<artifactId>hsqldb</artifactId>
<scope>test</scope>
</dependency>
Cuối cùng nhưng không kém phần chú thích các lớp học thử nghiệm với @ActiveProfiles("test")
.
@Sanjay có một cách để đặt nó nhưng tôi thấy nó khó hiểu. Bạn cũng chỉ có thể có tiểu sử production
mà bạn bật khi bạn đang ở trong quá trình sản xuất, chẳng hạn như:
spring.jpa.hibernate.ddl-auto: update
spring.datasource.url: jdbc:mysql://localhost:3306/dbname
spring.datasource.username: username
spring.datasource.password: password
Và không chỉ định bất cứ điều gì khác. Nếu bạn thêm một cơ sở dữ liệu nhúng trong phạm vi test
, nó sẽ có sẵn trong các thử nghiệm của bạn. Nếu bạn chạy thử nghiệm với cấu hình mặc định (không có tùy chỉnh), nó sẽ không tìm thấy bất kỳ thông tin cơ sở dữ liệu nào (vì chúng được lưu trữ trong cấu hình production
). Trong trường hợp đó, nó sẽ cố gắng tìm một cơ sở dữ liệu nhúng và khởi động nó cho bạn. Nếu bạn cần tùy biến hơn đối với một số lý do, bạn có thể có một application-test.properties
cho những người (bạn sẽ cần phải thêm ActiveProfiles("test")
để thử nghiệm của bạn (s)
Trong các trường hợp của tôi, tôi sẽ có cơ sở dữ liệu MySQL trong máy tính của mình, nó sẽ được sử dụng khi chạy ứng dụng cục bộ trong khi phát triển. Đó là lý do tại sao tôi nghĩ chúng tôi cần một hồ sơ 'dev' để chạy ứng dụng và một hồ sơ' test' để chạy các kiểm tra thông qua IDE của tôi. Bất kỳ đơn giản hóa có thể được thực hiện trong trường hợp này? – Sanjay
Chỉ cần thêm 'application-dev.properties' với MySQL DB của bạn và kích hoạt hồ sơ' dev' khi bạn chạy ứng dụng từ IDE của bạn. –
Được rồi, những gì tôi hiểu là câu trả lời của tôi ở trên trông suiting trường hợp này, ngoại trừ việc tôi có thể bỏ qua hồ sơ 'test' và' @ ActiveProfile' nếu cấu hình 'test' không có gì ngoại trừ DB. Hãy cho tôi biết nếu điều này nghe có vẻ sai. – Sanjay
giải pháp đơn giản nếu xây dựng với maven
:. Chỉ cần đặt một tập tin application.properties
dưới src/test/resources
và
Cơ chế hồ sơ Spring (Khởi động) là một công cụ khá mạnh mẽ, trong phạm vi, đi xa hơn "thiết lập trao đổi giữa thời gian thử nghiệm và thời gian chạy" Mặc dù, rõ ràng, như được minh chứng, nó có thể làm điều đó cũng :)
Cách tiếp cận khác là thêm chú thích @AutoConfigureTestDatabase
để bạn kiểm tra lớp học. kiểm tra của tôi thường trông như thế này:
@RunWith(SpringRunner.class)
@DataJpaTest
@AutoConfigureTestDatabase(connection = EmbeddedDatabaseConnection.H2)
public class MyRepositoryTest {
@Autowired
MyRepository repository;
@Test
public void test() throws Exception {
// Tests...
}
}
đơn giản nhất giải pháp:
1) trong src/main/nguồn lực có application.properties (sản xuất config):
spring.datasource.url=jdbc:mysql://localhost:3306/somedb
spring.datasource.username=root
spring.datasource.password=password
spring.datasource.driverClassName=com.mysql.jdbc.Driver
spring.jpa.database-platform = org.hibernate.dialect.MySQL5Dialect
và ứng dụng thử nghiệm .các thuộc tính có cấu hình HSQL như:
spring.jpa.hibernate.ddl-auto = create-drop
spring.jpa.database = HSQL
spring.jpa.properties.hibernate.dialect = org.hibernate.dialect.HSQLDialect
spring.datasource.driverClassName = org.hsqldb.jdbcDriver
spring.datasource.url: jdbc:hsqldb:mem:scratchdb
spring.datasource.username = sa
spring.datasource.password =
2) Thêm phụ thuộc HSQL vào pom.xml nếu bạn chưa có.
3) Chú thích lớp thử nghiệm của bạn bằng @ActiveProfiles ("test").
Làm việc như sự quyến rũ trong trường hợp của tôi.
Hey, làm thế nào để bạn thiết lập hsql chính nó? –
Xin chào @AlexBondar. Bạn có thể sử dụng mẫu trước nó nhưng bạn có thể sử dụng thay thế = Replace.NONE bên trong AutoConfigureTestDatabase – bpedroso
- 1. Django - Populating một cơ sở dữ liệu cho các mục đích thử nghiệm
- 2. Tạo dữ liệu thử nghiệm trong cơ sở dữ liệu
- 3. Thử nghiệm cơ sở dữ liệu trong python, postgresql
- 4. Đường ray có trong cơ sở dữ liệu bộ nhớ
- 5. Thử nghiệm với cơ sở dữ liệu trong bộ nhớ. Kiểm tra đơn vị hoặc thử nghiệm tích hợp?
- 6. Mybatis Spring cấu hình cơ sở dữ liệu Java
- 7. Làm thế nào để sử dụng trong cơ sở dữ liệu bộ nhớ với thử nghiệm tiêm chơi java
- 8. Làm thế nào tôi có thể giả lập kết nối db trong Spring Boot cho mục đích thử nghiệm?
- 9. Thử nghiệm thực thể khung 5 - Có trong cơ sở dữ liệu bộ nhớ một lựa chọn tốt
- 10. cơ sở dữ liệu trong bộ nhớ trong Python
- 11. Đề xuất cho cơ sở dữ liệu trong bộ nhớ so với cấu trúc dữ liệu an toàn của luồng
- 12. Cấu hình cơ sở dữ liệu Symfony2 trong tệp PHP
- 13. Trong trường hợp nào bạn thử nghiệm với Cơ sở dữ liệu trong bộ nhớ thay vì Cơ sở dữ liệu phát triển?
- 14. Hình ảnh cơ sở dữ liệu bộ nhớ đệm MVC
- 15. Cơ sở dữ liệu thử nghiệm Django trông trống trong khi thử nghiệm là runnin
- 16. Sự khác biệt giữa Trong cơ sở dữ liệu bộ nhớ và cơ sở dữ liệu bộ nhớ đĩa
- 17. Lưu vào đĩa cơ sở dữ liệu trong bộ nhớ
- 18. cách tắt cấu hình cơ sở dữ liệu trong symfony2
- 19. Khi thử nghiệm NHibernate với một SQLite Trong cấu hình bộ nhớ, làm thế nào để bạn tạo một cơ sở dữ liệu khác?
- 20. Cơ sở dữ liệu HSQL 100% trong bộ nhớ
- 21. Cấu hình mùa xuân từ cơ sở dữ liệu
- 22. nHibernate 3.2 cấu hình cơ sở dữ liệu trong mã?
- 23. Cấu hình nhiều cơ sở dữ liệu trong Django 1.2
- 24. Tạo backtype.storm.tuple.Tuple cho mục đích thử nghiệm?
- 25. Thử nghiệm đơn vị cơ sở dữ liệu SQLite Android
- 26. Laravel tạo cơ sở dữ liệu khi thử nghiệm
- 27. Cơ sở dữ liệu Xoay vòng - mục đích là gì?
- 28. Đối tượng giả vs Cơ sở dữ liệu thử nghiệm
- 29. Không thể tạo cơ sở dữ liệu thử nghiệm trong đường ray 3.2 với postgres
- 30. Tôi có thể cung cấp các cấu hình cơ sở dữ liệu khác nhau như thế nào với Spring Boot?
Hồ sơ 'dev' có vẻ kỳ lạ đối với tôi. Đó không phải là sản phẩm "sản xuất" sao? Trong trường hợp này, chỉ cần đặt thông tin đó trong 'application.properties', không cần' spring.profiles.active'. –
Tôi có một hồ sơ 'prod' riêng biệt. Nếu chúng ta đặt thông tin 'dev' trong * application.properties *, thì thông tin đó có bị rò rỉ cho cấu hình' test' không? – Sanjay
Tất cả những gì tôi nói là bạn không trả lời câu hỏi. Dev/kiểm tra là khó hiểu trong câu trả lời của bạn. Tôi mong đợi một hồ sơ sản xuất và sau đó là một hồ sơ thử nghiệm nhưng không phải là một "Dev" một. Bạn cũng có thể có một "prod" hồ sơ với sản xuất và để lại mặc định cho thử nghiệm. Vì Spring Boot không tìm thấy bất kỳ thông tin cụ thể nào, nó sẽ sử dụng vùng chứa được nhúng. –