2012-09-13 33 views
14

Tôi có một webProject với một Đối số VM gọi là "-Dfolder"đèo VM Đối số để Apache Tomcat

tôi sử dụng lập luận rằng trên applicationContext như thế này:

<value>file:${FNET_CORE_CONFIG}/conf/${folder}/jdbc.properties</value> 

Trong Eclipse, để thử nghiệm, tôi sử dụng "Chạy cấu hình" để đặt giá trị như thế này:

-Dfolder=Dev 

Bây giờ, tôi muốn kiểm tra webapp của mình trên Apache Tomcat vì vậy tôi cần đặt/gửi thư mục VM Argument.

Tôi làm như thế nào?

Tôi phải sử dụng setenv.sh? Làm sao?. Ai đó có thể cho tôi và ví dụ?

Cảm ơn và xin lỗi vì tiếng anh của tôi

+1

Tôi nghĩ bạn nên thử sử dụng các tham số [ServletContext] (http://docs.oracle.com/javaee/5/api/javax/servlet/ServletContext.html), vì nó một dự án web. –

+0

Tôi nghĩ rằng đây không phải là những gì tôi cần. Tôi cần phải đặt giá trị trên apache cho WAR, không phải trong phát triển. Ngoài ra tôi cần phải thay đổi giá trị thời gian để phát triển, thử nghiệm và Demo môi trường. Cảm ơn anyway –

+0

Đó là lý do tại sao tệp web.xml tồn tại. Nó là một bộ mô tả triển khai, cố tình tách biệt với mã. – EJP

Trả lời

18

Tôi không biết những gì phiên bản của Tomcat bạn sử dụng, nhưng trong Tomcat 7 trong file catalina.sh bạn có thể chỉ định CATALINA_OPTS biến và biến này sẽ được chuyển cho JVM.

Nhưng có thể đặt biến môi trường không phải là cách tốt nhất để đạt được mục tiêu của bạn. Có lẽ tốt nhất sẽ tạo ra các "app.properties" tập tin riêng biệt, và bao gồm nó trong applicationContext như thế này:

<context:property-placeholder location="classpath*:app.properties" /> 

Và giải pháp cho catalina.sh

# CATALINA_OPTS (Optional) Java runtime options used when the "start", 
#     "run" or "debug" command is executed. 
#     Include here and not in JAVA_OPTS all options, that should 
#     only be used by Tomcat itself, not by the stop process, 
#     the version command etc. 
#     Examples are heap size, GC logging, JMX ports etc. 

dụ:

CATALINA_OPTS = "-Dfolder = Dev"

EDIT:

cho các cửa sổ nó phải được cái gì đó như set CATALINA_OPTS="-Dfolder=Dev"

EDIT:

Trong cấu hình Spring bạn có thể sử dụng tài sản hệ thống giống như $ {PROPERTYNAME}, và cũng có thể bao gồm tập tin với định nghĩa tài sản, với context:property-placeholder, và tất cả được xác định trong thuộc tính tệp đó cũng trở thành có sẵn trong cấu hình.

Ví dụ: bạn có các thuộc tính bộ cơ sở: config.properties và tập hợp các tệp có cài đặt kết nối db (DEV.properties, UAT.properties, PROD.properties). Vì vậy, làm thế nào bạn có thể bao gồm các thuộc tính khác nhau cho môi trường khác nhau? Nó có thể được thực hiện nó nhiều cách, ví dụ, thuộc tính hệ thống đặt trong catalina.bat

set CATALINA_OPTS="-Dbuild=DEV" 

và trong applicationConfig.xml

<context:property-placeholder location="classpath*:${build}.properties, classpath*:config.properties" /> 

Hoặc bạn có thể tạo khác nhau cấu hình xây dựng và đưa vào WAR thức chỉ một thuộc tính (DEV, UAT, PROD) cho mỗi cấu hình xây dựng. Trong applicationConfig thiết lập một cái gì đó như:

<context:property-placeholder location="classpath*:*.properties" /> 
+0

Tôi đang làm việc với Apache Tomcat 7. Tôi đang sử dụng VM Argument vì tôi cần đọc một phần "" của đường dẫn cho Log4j.properties và JDBC.properties. Vì vậy, tôi thử với applicationContext và không thể làm cho nó hoạt động. Tôi sẽ thử câu trả lời của bạn ngay bây giờ. cảm ơn rất nhiều –

+0

Ngoài ra, tôi đang làm việc với Windows. Tôi có phải sử dụng catalina.sh hoặc catalina.BAT không? –

+0

Bạn có sử dụng 'maven' hoặc' ant' để xây dựng không? Một giải pháp khác - tạo cấu hình xây dựng khác nhau cho môi trường khác nhau và đặt tất cả .properties bạn cần trong quá trình xây dựng. Tôi biết Jenkins cho phép dễ dàng cấu hình điều này. (Nếu bạn sử dụng Jenkins như máy chủ CI) – user1516873

9

Tới $ CATALINA_HOME và chỉnh sửa tập tin setenv.sh bằng cách thêm các thông số với giá trị. Nếu bạn muốn khối lượng nhiều thông số, hãy tách chúng bằng cách sử dụng space

Ví dụ:

cd /opt/tomcat/bin/ 
sudo nano setenv.sh 

chỉnh sửa dòng

CATALINA_OPTS="${CATALINA_OPTS}" 

để

CATALINA_OPTS="${CATALINA_OPTS} -Dparam=value -Dparam2=value2" 

tomcat khởi động lại:

service tomcat restart 

bây giờ bạn sẽ có thể nhìn thấy các đối số truyền cho tomcat khi bạn chạy :

ps aux | grep tomcat 
+2

Sự bỏ phiếu vì người dùng này đã đưa ra một ví dụ với nhiều tham số. Tôi đang sử dụng để sử dụng gui cấu hình Tomcat và nó không rõ ràng từ đó các tham số được phân cách không gian. – Sebastian

0

Made nó hoạt động trong Windows, bằng cách tạo ra một tập tin setenv.bat trong cùng thư mục với catalina.bat và startup.bat (theo khuyến cáo trong catalina.bat) và đưa vào nội dung của .bat :

set CATALINA_OPTS="-DyourVariableName=yourValue" 

Đó là tất cả. Tôi thích cách này vì nó trông khá sạch sẽ

Các vấn đề liên quan