Tôi có một tệp Maven settings.xml
trong thư mục ~/.m2
của mình; nó trông như thế này:Sử dụng thuộc tính settings.xml của Maven bên trong bối cảnh Spring
<settings>
<profiles>
<profile>
<id>mike</id>
<properties>
<db.driver>org.postgresql.Driver</db.driver>
<db.type>postgresql</db.type>
<db.host>localhost</db.host>
<db.port>5432</db.port>
<db.url>jdbc:${db.type}://${db.host}:${db.port}/dbname</db.url>
</properties>
</profile>
</profiles>
<activeProfiles>
<activeProfile>mike</activeProfile>
</activeProfiles>
<servers>
<server>
<id>server_id</id>
<username>mike</username>
<password>{some_encrypted_password}</password>
</server>
</servers>
</settings>
tôi muốn sử dụng những tính chất hai lần
- Khi bên trong giai đoạn
integration-test
Maven để thiết lập và phá đổ cơ sở dữ liệu của tôi. Sử dụng tính năng lọc Maven, tính năng này hoạt động hoàn hảo. - Lần thứ hai khi chạy ứng dụng Spring của tôi, có nghĩa là tôi cần phải thay thế các thuộc tính này vào tệp
servlet-context.xml
của mình trong giai đoạnresources:resources
của Maven. Đối với các thuộc tính ở phần trên củasettings.xml
, chẳng hạn như${db.url}
, tính năng này hoạt động tốt. Tôi không thể tìm ra cách thay thế tên người dùng cơ sở dữ liệu và mật khẩu (đã được giải mã) của mình thành tệp Springservlet-context.xml
.
Phần thích hợp của tập tin servlet-context.xml
của tôi trông giống như:
<bean id="myDataSource" class="org.apache.commons.dbcp.BasicDataSource" destroy-method="close">
<property name="driverClassName"><value>${db.driver}</value></property>
<property name="url"><value>${db.url}</value></property>
<property name="username"><value>${username}</value></property>
<property name="password"><value>${password}</value></property>
</bean>
Mục tiêu cuối cùng ở đây là dành cho mỗi nhà phát triển để có các cài đặt Maven riêng của họ (và cơ sở dữ liệu trên máy tính của mình để thử nghiệm hội nhập). ..Và thiết lập tương tự trên máy chủ Jenkins. Chúng tôi không muốn chia sẻ tên người dùng/mật khẩu phổ biến/v.v.
Điểm đó về biên dịch lại hợp lệ. Tôi chắc chắn sẽ phải nhìn vào đó nhiều hơn, vì đó là một mô hình chống mà tôi hy vọng sẽ tránh được. Chắc chắn cần điều này để chạy theo kiểu CI/CD. Nhưng đồng thời, tôi đang cố gắng tái sử dụng thông tin đã tồn tại và được lưu trữ trong 'cài đặt.xml' – Mike
OK, nó thực sự tốt, bạn sẽ refactor này. Hiện tại, như tôi đã nói, hãy sử dụng tính năng lọc tài nguyên web này. Nó sẽ hoạt động và cho phép bạn có cấu hình này ở một nơi, như bạn đã nói. –
Mùa xuân 3.1 đã giới thiệu một loạt nội dung mới cho loại kịch bản chính xác này: http://blog.springsource.org/2011/02/15/spring-3-1-m1-unified-property-management/ – artbristol