kilka baz danych - jeden applicationContext.xml?

0

Czesc, mam do Was takie pytania:

  1. jesli chce w mojej aplikacji uzyc innej bazy danych w zaleznosci od instalacji, to czy moge w applicationContext.xml zdefiniowac kilka dataSourcow? Jesli tak, to w jaki sposob pozniej moge rozpoznawac ktore program ma zaladowac?

tzn chodzi mi o to, ze "ruchoma czesc" to tylko dataSource, np:

<bean id="hibernateDataSource" class="org.apache.commons.dbcp.BasicDataSource" destroy-method="close">

<property name="driverClassName" value="com.mysql.jdbc.Driver" />
<property name="url" value="jdbc:mysql://host1" />
<property name="username" value="u1" />
<property name="password" value="p1" />
</bean>

//potem

<bean id="hibernateDataSource" class="org.apache.commons.dbcp.BasicDataSource" destroy-method="close">

<property name="driverClassName" value="com.mysql.jdbc.Driver" />
<property name="url" value="jdbc:mysql://host2" />
<property name="username" value="u2" />
<property name="password" value="p2" />
</bean>

//ale potem, w zaleznosci od tego ktory hibernateDataSource bylby (jakos, jak?) //wybrany moje entity, serwisy itd bylyby "przypiete" do odpowiedniego hibernateDataSource. 
 
  1. A moze to sie robi w ten sposob, ze kazda instalacja ma swoj applicationContext i laduje odpowiedni (ktory, to moglabym sobie np definiowac w jakis wczytywanych na poczatku properties)?

Dodam, ze mi nie chodzi o to by miec kilka polaczen i dla rozynch entity czy serwisow uzywac roznych dataSource, tylko by miec 1 dataSource, ale jaki - to by jakos to ustawiac.

pzdr,
misty

0

Dla każdej aplikacji należy konfigurować połączenie oddzielnie. Głupio by było jakby z jednej aplikacji można było zajrzeć do DB innych .

0

Wiesz co, bo mi chodzi o cos takiego - mam juz moj program XYZ.jar - teraz odpalam go na: localhost, test oraz production. Dla kazdego sa inne ustawienia dla bazy. I myslalam ze moge je miec wszystkie zdefiniowane w 1 applicationContext.xml, a potem w aplikacji (jakos) uzyc odpowiedniego datasource do ktorego beda juz automatycznie skojarzone wszystkie entity i serwisy..
ale z tego co mowisz to powinnam miec 3 rozne applicationContext..

0

Z tego co pamiętam to w Springu można importować ustawienia tzn. w głównym pliku applicationContext.xml podajesz tag import wskazujący na plik z konfiguracją...

Jest jednak prostsze rozwiązanie. Jeżeli aplikacja jest uruchamiana na kontenerze serwletów albo serwerze JEE to zamiast ręcznie wpisywać konfiguracją bazy danych można użyć JNDI i datasource. W takim przypadku na serwerze konfigurujesz datasource (tomcat 6: http://tomcat.apache.org/tomcat-6.0-doc/jndi-datasource-examples-howto.html), a następnie w appliacationcontext ustawiasz "po nazwie" połączenie: http://pro-programmers.blogspot.com/2008/07/spring-datasource-jndi-lookup-from.html

ApplicationContext jest jedno. W nim wpisana jest nazwa JNDI dla DataSource, a na każdym serwerze z osobna zdefiniowany jest DataSource o odpowiedniej nazwie.

0

To mi nie pomoze bo aplikacja jest J2SE..

0

Czyli jak rozumiem masz wersje tzn. dev, test, production i dla każdej z nich chciałabyś mieć osobą konfigurację bazy danych?

0

tak, ale nie chce pisac 3ech applicationContext.xml bo wydaje mi sie to bez sensu, bo przeciez tylko ustawienia dla bazy sie zmienia..

0

To pozostaje stworzenie osobnego pliku z konfiguracją bazy i użycie import w głównym applicationcontext.

0

No dobra, utworzylam sobie ds.properties, a w applicationContext.xml dodalam:

 
<bean id="propertyConfigurer" class="org.springframework.beans.factory.config.PropertyPlaceholderConfigurer">
  <property name="location" value="ds.properties"/>
 </bean>

	<bean id="hibernateDataSource" class="org.apache.commons.dbcp.BasicDataSource" destroy-method="close">

		<property name="driverClassName" value="${db.driver}" />
		<property name="url" value="${db.url}" />
		<property name="username" value="${db.user}" />
		<property name="password" value="${db.password}" />
	</bean>

i ogolnie to dziala, ale wtedy kiedy ds.properties jest w tym samym katalogu (resources) co applicationContext.. no a oczywiscie nie ma tam byc, tylko ma byc "obok jara". Jak moge zdefiniowac sciezke w
value="ds.properties"/?

pzdr,
misty

0

A pokombinuj ze ścieżkami i rodzajami zasobów? http://static.springsource.org/spring/docs/2.0.x/reference/resources.html

0

no wlasnie siedze dokladnie na tej samej stronie ale mi nie wychodzi :/ Probowalam tez z importem jak mowiles:

<import resource="classpath:ds.properties" />

ale tez FileNotFoundException :(

0

A jak uzyjesz 'file:/db.properties' zamiast db.properties? Albo cos podobnego?

0

A tutaj przyklad z jednego z naszych projektow:

<bean id="propertyConfigurer" class="org.springframework.beans.factory.config.PropertyPlaceholderConfigurer"> <property name="locations"> <list> <value>/WEB-INF/common.properties</value> <value>file:${assets.path}/environment.properties</value> <value>file:${assets.path}/jdbc.properties</value> </list> </property> </bean>

PRzy czym assets.path jest definiowane w profilach w mavenie, i applicationContext.xml jest filtrowany. Nasze sciezki sa absolutne, ale file:/ wspiera rowniez sciezki wzgledne.

0

assets.path jest definiowane w profilach w mavenie

o jezu, juz mam lzy w oczach! nie moge sobie tego zrobic jakos tak ze dam ${moj_projekt.dir}/ds.properties ? Przeciez to by bylo najprostsze i najbardziej logiczne..

ps.
poprzednie przyklady mi sie sypia bo on szuka tego ds.properties w tym katalogu gdzie jest applicationContext (czyli w resources)

0

current.dir nie bo nie ma, jest za to user.dir, ale to jest rozne w zaleznosci gdzie uruchamiany jest program. Gdzies na forum jest kawalek kodu, ktory pozwala znalezc katalog w ktorym znajduje sie program czy cos, to by bylo najlepsze.
Jak szuka zle, to zmien sciezke. Ale dowiodlas ze mozna uzyc file:/ zeby dostac sie do zewnetrznych plikow, a o to chodzilo w pytaniu. Jak to teraz dopasowac do twoich wymagan to step 2.

0

wiesz co, ale ja w takim razie nie kumam. Bo zobacz, uzylam:

 
 <import resource="file:///${user.dir}/db.properties" /> 

w pomie mam ustawione ze mi kopiuje db.properties do target (czyli tam gdzie jest tworzony moj jar). Wchodze dam, uruchamiam i mi wywala :

java.io.FileNotFoundException: C:\misty\workspace\XYZ\target\db.properties (The system cannot find the file specified)

tylko ze ja jestem w tym katalogu (target) i widze tam ten plik, on istnieje! to jak moze byc FileNotFoundException??

0

Dobra, poszlo:

 
	<bean id="propertyConfigurer" class="org.springframework.beans.factory.config.PropertyPlaceholderConfigurer">
		<property name="location" value="file:///${user.dir}/ds.properties" />
	</bean>

fajnie :)

dzieki za pomoc!
   pzdr,
misty

1 użytkowników online, w tym zalogowanych: 0, gości: 1