Externaliser la configuration de Tomcat
J'ai une source de données de configuration dans context.xml. Est-il possible de ne pas coder en dur la base de données de paramètres dans ce fichier? Par exemple, utiliser un externe fichier de propriétés, et de charger les paramètres?
Quelque chose comme ceci:
context.xml:
<Resource
name="jdbc/myDS" auth="Container"
type="javax.sql.DataSource"
driverClassName="oracle.jdbc.OracleDriver"
url="${db.url}"
username="${db.user}"
password="${db.pwd}"
maxActive="2"
maxIdle="2"
maxWait="-1"/>
db.propriétés:
db.url=jdbc:oracle:thin:@server:1521:sid
db.user=test
db.pwd=test
source d'informationauteur never | 2012-07-13
Vous devez vous connecter pour publier un commentaire.
Comme indiqué icivous pouvez faire cela de la manière suivante.
1.Télécharger tomcat bibliothèque pour obtenir la définition de l'interface, par exemple par la définition de maven dependency:
2.La prochaine étape est de créer un com.mycompany.MyPropertyDecoder de la manière suivante:
3.Mettre MyPropertyDecoder.class en tomcat7/lib dossier
4.Définir org.apache.tomcat.util.autoclave. PROPERTY_SOURCE propriété à tomcat7/conf/catalina.propriétés comme suit:
5.Mise à jour de votre context.xml avec des propriétés de vars
6.Mettre application.propriétés fichier quelque part dans votre projet/conteneur
7.Assurez-vous que MyPropertyDecoder correctement lit application.propriétés
8.Profitez-en!
PS il y a Aussi une approche similaire est décrit pour tc Server.
Il est facile avec contexte de déployer des descripteursqui ressemblent à:
Il y a plusieurs endroits où vous pouvez mettre cette config, à mon avis, la meilleure option est
$CATALINA_BASE/conf/[enginename]/[hostname]/$APP.xml
Au-dessus de XML
Context
peut contenir personnaliséLoader
org.apache.catalina.loader.VirtualWebappLoader (disponible dans moderne Tomcat 7, vous pouvez ajouter propre classpath par application à votre.properties
fichiers),Parameter
(accessible via leFilterConfig.getServletContext().getInitParameter(name)
) etEnvironment
(accessible via lenew InitialContext().lookup("java:comp/env").lookup("name")
)Voir la discussion à:
Mise à JOUR Tomcat 8 changer la syntaxe pour
<Resources>
et<Loader>
éléments, correspondant à la partie ressembler à ça:Sûr, c'est possible. Vous devez vous inscrire ServletContextListener à votre
web.xml
comme ceci:Source de
com.mycompany.servlets.ApplicationListener
:Et puis, quelque part dans le web-le code de l'application pour accéder à
dataSource
:SomeDataSourceImpl
est de quelques cas concrets de mise en œuvre de javax.sql.Source de données. Veuillez nous aviser si vous n'utilisez pas spécifiqueDataSource
s (comme ComboPooledDataSource pour le regroupement de connexions) et ne sais pas comment l'obtenir - je vais poster la façon de contourner cela.some-data-source-alias
- est justeString
alias(clé) pour votreDataSource
instance dansServletContext
attribut de la carte. Une bonne pratique est de donner des alias de préfixer avec le nom du package, commecom.mycompany.mywebapp.dataSource
.Espère que cela aide...
Si c'est Tomcat 7, vous pouvez écrire votre propre
org.apache.tomcat.util.IntrospectionUtils.PropertySource
de mise en œuvre de lire les variables écrites comme "${...}" danscontext.xml
. Vous aurez besoin pour configurer le système de propriétéorg.apache.tomcat.util.digester.PROPERTY_SOURCE
pour pointer vers votrePropertySource
mise en œuvre.