外部ファイルからの接続情報取得についての質問

このQ&Aのポイント
  • 現在、hibernateを使用してバッチを作成しています。しかし、hibernate.cfg.xmlの設定で外部ファイルから接続情報を取得する方法がわかりません。
  • 質問の内容は、hibernate.cfg.xmlの設定で外部ファイルから接続情報を取得できるかどうかについてです。
  • 現在、hibernate.cfg.xmlに直接接続情報を指定していますが、リソースファイルから情報を取得して設定したいです。しかし、情報が得られず困っています。アドバイスをいただけないでしょうか。
回答を見る
  • ベストアンサー

hibernate.cfg.xmlの設定

現在、hibernateを使用したバッチを作成しております。 hibernateの設定について教えていただきたい事があり、質問いたしました。 【hibernate.cfg.xml 例】 <?xml version="1.0" ?> <!DOCTYPE hibernate-configuration PUBLIC "-//Hibernate/Hibernate Configuration DTD//EN" "http://hibernate.sourceforge.net/hibernate-configuration-2.0.dtd" > <hibernate-configuration> <session-factory> <!--MySQL JDBC Driver connection --> <property name="connection.driver_class">org.gjt.mm.mysql.Driver </property> <property name="connection.url">jdbc:mysql:///test</property> <property name="connection.username">root</property> <property name="connection.password">12345</property> <property name="dialect">net.sf.hibernate.dialect.MySQLDialect </property> <property name="show_sql">true</property> <property name="use_outer_join">true</property> <!-- Mapping files --> <mapping resource="test.hbm.xml"/> </session-factory> </hibernate-configuration> 上記のproperty nameで指定しているconnection.usernameやconnection.urlの設定している値を 外部ファイルから取得したりといった事は可能でしょうか? <property name="connection.username">"${jdbc.username}"</property> といった感じで取得できるのかなと思っていたのですが。。。 こちらのサイトに書いてある内容を参考に試してみているのですが、外部ファイルから値が取得できないで困っています。 【参考にしたページ】 http://stackoverflow.com/questions/2370354/how-can-i-set-hibernate-database-config-from-outside-config-file 尚、 hibernate.cfg.xmlの配置場所は/src/main/java/配下で、 <property name="connection.username">root</property> <property name="connection.password">12345</property> と、直接設定値を指定した場合は問題なくhibernateが動作してDBから値も取れています。 /src/main/resouses/配下に置いているjdbc.propertiesのリソースファイルから 接続情報を取得してhibernate.cfg.xmlのproperty name="connection.username"などに値が渡されるようにしたいのですが、可能でしょうか? ずいぶん調べたのですが、それといった情報が得られず困り果て質問するに至りました。 アドバイスいただけないでしょうか。

  • Java
  • 回答数1
  • ありがとう数2

質問者が選んだベストアンサー

  • ベストアンサー
回答No.1

cfgファイルもsrc/main/resources配下にしない理由はありますか? あと、誤記かもしれませんが、 <property name="connection.username">"${jdbc.username}"</property> の${jdbc.username}を囲むダブルクォーテーションは必要ないのではないでしょうか?

shinamonchan
質問者

お礼

oshietezouさん、さっそくの回答ありがとうございます。 とりいそぎ、ご回答の内容で動作検証してみます。 問題解決後に質問を締め切りいたします。

関連するQ&A

  • hibernate.cfg.xmlの配置場所について

    現在、StrutsとHibernateを用いてWebアプリケーションの作成をしている者です。 タイトルにも書いた、hibernate.cfg.xmlの配置場所について質問させて下さい。 プロジェクトはEclipseの「動的Webプロジェクト」で作成しているのですが、この場合、hibernatecfg.xmlを配置する場所は、ルートのsrcフォルダ直下でよろしいのでしょうか? 現在の障害としては、 Configuration config = new Configuration(); SessionFactory sessionFactory = config.buildSessionFactory(); としているところで、以下のエラーが発生してしまっているんです。 org.hibernate.HibernateException: Hibernate Dialect must be explicitly set 色々試してみたところ、hibernatecfg.xmlを読み込めていないのが原因なのかと考えているところです。 Javaに関してはまだまだ知識が浅く、Hibernateに至ってはほとんど初心者レベルですので、もしかしたらかなり的外れな質問になっているかと思いますが、アドバイス等ありましたら、宜しくお願い致します。

    • ベストアンサー
    • Java
  • ibatis初心者 設定エラー

    ibatisにてデータをinsertしようとしたら以下のようなエラーがでてしまいました。 com.ibatis.common.xml.NodeletException: Error parsing XML. Cause: java.lang.RuntimeException: Error parsing XPath '/sqlMapConfig/sqlMap'. Cause: java.io.IOException: Could not find resource SqlMap-blogA.xml Configuration.xmlは以下の通りとなっております。 <?xml version="1.0" encoding="UTF-8" ?> <!DOCTYPE sqlMapConfig PUBLIC "-//ibatis.apache.org//DTD SQL Map Config 2.0//EN" "http://ibatis.apache.org/dtd/sql-map-config-2.dtd"> <sqlMapConfig> <!-- DB接続設定 --> <transactionManager type="JDBC"> <dataSource type="SIMPLE"> <property name="JDBC.Driver" value="com.mysql.jdbc.Driver"/> <property name="JDBC.ConnectionURL" value="jdbc:mysql://localhost:3306/blog"/> <property name="JDBC.Username" value="root"/> <property name="JDBC.Password" value="nicelife"/> </dataSource> </transactionManager> <!-- sqlMapファイル参照する --> <sqlMap resource="SqlMap-blogA.xml"/>←ここの相対パスが問題 </sqlMapConfig>   ちなみにSqlMap-blogA.xmlとConfiguration.xmlはWEB-INFの直下にて同じ場所においてありますので、上記の Could not find resource SqlMap-blogA.xmlは出ないと思うのですが・・・それと Error parsing XPath '/sqlMapConfig/sqlMap'.これの意味もよくわかりません。   どうすればいいのかわかりません   なにかアドバイスをいただけたらありがたいのですが・・・・   ご教授の程よろしくお願い申し上げます。

  • Tomcat5.0でJNDI

    お世話になります。 Tomcat5.0で、JNDIを使ってコネクションプーリングを実現しようとしてますが、なかなかうまいこといきません。 コンテキストファイル(hoge.xml)の設定 前略 <Resource name="jdbc/hoge" auth="Container" type="javax.sql.DataSource"/> <ResourceParams name="jdbc/hoge">   <parameter>     <name>factory</name> <value>org.apache.commons.dbcp.BasicDataSourceFactory</value>   </parameter>   <parameter>     <name>driverClassName</name>     <value>com.mysql.jdbc.Driver</value>   </parameter>   <parameter>     <name>url</name>     <value>jdbc:mysql://localhost/hoge</value>   </parameter>   <parameter>     <name>username</name>     <value>hogeuser</value>   </parameter>   <parameter>     <name>password</name>     <value>hogepass</value>   </parameter> 中略 </ResourceParams> 後略 これを、トムキャットホーム\conf\Catalina\localhostに置いています。 Javaの方のソース String dsString = getServlet().getInitParameter("java:comp/env/jdbc/hoge"); InitialContext context = new InitialContext(); DataSource ds = (DataSource) context.lookup(dsString); Connection connection = ds.getConnection(); 実行すると、 名前 java:/comp/env/jdbc/hoge はこのコンテキストにバインドされていません という具合に怒られます。名前はjdbc/hogeで合ってると思うのですが、他に何かおかしいところがあるでしょうか。 また他に調べるべき点はどのようなところでしょうか。 どうぞよろしくご教授ください。

  • JNDIでDataDourceにNullが入ってしまう

    いつもお世話になっています。 JNDIを使ってDataSourceを取得しようと思っているのですがNullが返ってきてしまってかなりハマッてます。 ご指導頂けたらと思います。 設定は下記のようになっています。 環境: jdk:1.4.2_12 tomcat:5.0 Mysql:4.0.20a-nt server.xml-------------------------------------------------- <Context docBase="C:\Documents and Settings\ESC\workspace\SNS\.deployables\SNS" path="/SNS" reloadable="true"> <Resource name="jdbc/MySQL" auth="Container" type="javax.sql.Datasource" /> <ResourceParams name="jdbc/MySQL"> <parameter> <name>factory</name> <value>org.apache.commons.dbcp.BasicDataSourceFactory</value> </parameter> <!-- Max Active <parameter> <name>maxActive</name> <value>100</value> </parameter> --> <!-- Max Idle <parameter> <name>maxIdle</name> <value>30</value> </parameter> --> <!-- Max Wait <parameter> <name>maxWait</name> <value>10000</value> </parameter> --> <parameter> <name>username</name> <value>****</value> </parameter> <parameter> <name>password</name> <value>****</value> </parameter> <parameter> <name>driverClassName</name> <value>com.mysql.jdbc.Driver</value> </parameter> <parameter> <name>url</name> <value>jdbc:mysql://localhost/dbname?useUnicode=true&amp;characterEncording=Windows-31J</value> </parameter> </ResourceParams> </Context> web.xml-------------------------------------------------- <resource-ref> <res-ref-name>jdbc/MySQL</res-ref-name> <res-type>javax.sql.DataSource</res-type> <res-auth>Container</res-auth> </resource-ref> java側-------------------------------------------------- InitialContext ctx = new InitialContext(); DataSource ds = (DataSource) ctx.lookup("java:comp/env/jdbc/MySQL"); connection = ds.getConnection(); -------------------------------------------------------- どうか宜しくお願い致します。

  • TomcatのJDBC連携について

    TomcatのJDBC連携について javax.servlet.ServletException: Cannot create JDBC driver of class '' for connect URL 'null' というエラーが消えず、知恵をお貸しください。 他にも同様のケースについて調べては見たのですが解決しません。 ■環境 Windows XP SP3 Eclipse3.6(Pleiades All in One 3.6.0.20100623) apache-tomcat-5.5.29 mysql-essential-5.1.48 ■設定 ■server.xml に下記を追加 <Context docBase="Test" path="/test" reloadable="true" source="org.eclipse.jst.j2ee.server:Test"> </Context> ■Tomcat 5.5/conf/Catalina/localhost/Test.xml に下記を記載 <Context docBase="${catalina.home}/server/webapps/test" privileged="true" antiResourceLocking="false" antiJARLocking="false"> <Resource name="jdbc/MySQL_JDBC" auth="Container" type="javax.sql.DataSource" factory="org.apache.tomcat.dbcp.dbcp.BasicDataSourceFactory" driverClassName="com.mysql.jdbc.Driver" url="jdbc:mysql://localhost/test?useUnicode=true&characterEncoding=sjis" username="**" password="**" maxActive="20" maxIdle="30" maxWait="1800"/> </Context> ■Webアプリケーション配下の web.xmlに下記を追加 <resource-ref> <res-ref-name>jdbc/MySQL_JDBC</res-ref-name> <res-type>javax.sql.DataSource</res-type> <res-auth>Container</res-auth> </resource-ref> ■JSPソースに下記を記載 jdbc.jsp <% InitialContext initCon = new InitialContext(); DataSource ds = (DataSource) initCon.lookup("java:comp/env/jdbc/MySQL_JDBC"); Connection con = ds.getConnection(); Statement stmt = con.createStatement(); ResultSet result = stmt.executeQuery("select * from mytable;"); while (result.next()) { 表示処理 } con.close(); initCon.close(); %> 別途作成した下記JSPではデータ取得はできています。 <% Class.forName("com.mysql.jdbc.Driver"); Connection conn=DriverManager.getConnection("jdbc:mysql://localhost/test?" + "user=tester&password=tester&useUnicode=true&characterEncoding=Shift_JIS"); Statement st=conn.createStatement(); ResultSet res = st.executeQuery("select * from mytable");

    • ベストアンサー
    • Java
  • eclipseでのJDBCについて

    eclipseのMySQLJDBCの外部接続に関して全く分からず手詰まりしているので、ご教授願いたいと思います。 プロジェクトの配下のweb.xmlにMySQLの接続情報を入力しました。一応ソースです。 web.xmlに <context-param> <param-name>jdbcDriver</param-name> <param-value>com.mysql.jdbc.Driver</param-value> <description>JDBC Driver</description> </context-param> <context-param> <param-name>jdbcUri</param-name> <param-value>jdbc:mysql://localhost:3306/airticket?useUnicode=true&amp; characterEncoding=sjis</param-value> <description>MySQL URI</description> </context-param> <resource-ref> <res-ref-name>jdbc/MySQL_JDBC</res-ref-name> <res-type>javax.sql.DataSource</res-type> <res-auth>Container</res-auth> </resource-ref> を書いて、 会員登録をするクラスに、 try{ try{ //ドライバクラスをロード Class.forName("com.mysql.jdbc.Driver").newInstance(); } catch(Exception ex) { } //データベースへ接続 String url = "jdbc:mysql:///airticket?useUnicode=true&characterEncoding=SJIS"; Connection con = DriverManager.getConnection(url); //ステートメントオブジェクトを生成 Statement stmt=con.createStatement(); String sql="insert into member(member_id,member_pass,family_name,first_name,birth_year,birth_month,birth_day,address,post_code,mail,"+"sex,home_tel,job) values('"+ member_id +"',"+ mempasslong +",'"+ family_name +"','"+ first_name +"',"+ birth_year +","+ birth_month +","+ birth_day +",'"+ address +"',"+ post_code +",'"+ mail +"',"+sexint+","+ home_tel +",'"+ job +"');"; int result=stmt.executeUpdate(sql);       stmt.executeBatch(); // データベースから切断 stmt.close(); con.close(); } catch (Exception e) { message = "登録失敗しました。"; request.setAttribute("message", message); return mapping.findForward("registererror"); } message = "登録完了しました。"; request.setAttribute("message", message); return mapping.findForward("success"); } } って書いてクラスからweb.xmlを参照してデータベース接続したいんですが、エラーが出ずに困っています。そもそもクラスからweb.xmlの情報を参照するやりかたはあるのですか?教えてください

  • Tomcat6のコネクションプーリングについて

    Tomcat6のコネクションプーリングについて 現在、以下の環境で開発を行っているのですが、 データソースからConnectionを取得できていない状況です。 過去に同様の内容が記載されていたのですが、 内容が理解できず投稿させていただいております。 【フォルダ構成】 test  |  |--META-INF  |   |  |   --context.xml  |  |--WEB-INF     |      --web.xml 【環境】 Windows XP Pro Eclipse3.3.2 apache2.2 tomcat6.0 jdk1.6.0_18 mysql-connector-java-5.1.12-bin.jar Struts2 以下に、context.xml、web.xml及び、サーブレットのコードを記載します ■web.xml=========== <?xml version="1.0" encoding="UTF-8"?> ~~(抜粋)~~ <resource-ref> <res-ref-name>test</res-ref-name> <res-type>javax.sql.DataSource</res-type> <res-auth>Container</res-auth> </resource-ref> </web-app> ■context.xml======= <?xml version="1.0" encoding="UTF-8"?> <Context displayName="test" docBase="test" path="/test" reloadable="false"> <Resource name="jdbc/test" auth="Container" type="javax.sql.DataSource" username="root" password="root" driverClassName="org.gjt.mm.mysql.Driver" url="jdbc:mysql://localhost/test?useUnicode=true&amp;characterEncoding=UTF-8" maxActive="4" maxWait="5000" maxIdle="2" validationQuery="select cont(*) from db_fuzoku" /> </Context> ■サーブレットコード(抜粋)===== public class test_Dao { DataSource ds; public ArrayList select(){ ArrayList list = new ArrayList(); try { // 初期コンテキストを取得 Context initCtx = new InitialContext(); Context envCtx = (Context) initCtx.lookup("java:comp/env"); // ルックアップしてデータソースを取得 ds = (DataSource) envCtx.lookup("jdbc/test"); } catch (Exception e) { e.printStackTrace(); } Connection con = null; Statement stmt = null; try { // データソースからConnectionを取得 con = ds.getConnection(); ==================== 以上、よろしくお願いします。

  • PEAR XML_Query2XMLを利用したPHPからFlash(AS3)へのXMLデータの渡し方について。

    毎度お世話になっております。 前回させていただいた質問で、PHPからFlashへのデータ受け渡しをしたいと考えていたところ、XML形式がいいと教えていただき、試していました。 FlashのただのXMLファイルの読み込みはでき、PHPのPEAR XML_Query2XMLを利用してデータベースのデータをXMLに整形することも出来ました。 しかし、その後の連結的な操作が分からず戸惑っております。 お時間があるときでよろしいので、何を使ったらよいかなどアドバイス等を頂ければと思います。 よろしくお願いします。 環境 Flash CS3(AS3) PHP5.2.6 MySQL5.1.29 Apache2.2.10 ・PHPの今のところのプログラム <?php // include required files include 'XML/Query2XML.php'; include 'MDB2.php'; try { // initialize Query2XML object $q2x = XML_Query2XML::factory(MDB2::factory('mysql://ユーザ名:パスワード@localhost/データベース名')); // generate SQL query // get results as XML $sql = "SELECT * FROM table名"; $xml = $q2x->getFlatXML($sql); // send output to browser header('Content-Type: text/xml'); $xml->formatOutput = true; echo $xml->saveXML(); } catch (Exception $e) { echo $e->getMessage(); } ?> ・AS3の今のところのプログラム System.useCodePage = true; // 外部XMLはURLLoaderで読み込む var myLoader:URLLoader = new URLLoader(); myLoader.addEventListener(Event.COMPLETE, completeData); myLoader.load(new URLRequest("test.xml")); // 読み込み完了後の処理 function completeData(event:Event):void { // 読み込んだ文字列をmyXMLに入れる var myXML:XML = new XML(myLoader.data); // データのnameとpriceの値をリストアップ表示 trace(myXML.drink[1].name); for (var i = 0; i < myXML.drink.length(); i++) {; //ダイナミックテキストでi番目を表示 db.text = myXML.drink[i].name trace(myXML.drink[i].name); trace(myXML.drink[i].@price); } } よろしくお願いします^^

    • ベストアンサー
    • PHP
  • C#でXMLファイルの情報にアクセスする

    以下のようなXMLファイルがあったとき、serverとdatadaseの属性値を取り出す方法がわかりません。 どなたかご教授ください。 また、複数あるpropertyの中から(value=)"sa"を取得する方法もお願いします。 現在、C#で、次のようにしてXMLファイルにアクセスして、ルート要素名を取り出すことには成功しています。 ------ ソース ここから -------- XmlDocument xmlDoc = new XmlDocument(); // XmlDocumentオブジェクトを作成 xmlDoc.Load(fileName); XmlElement xmlRoot = xmlDoc.DocumentElement; Console.Write("ルート名は[" + xmlRoot.Name + "]です。\n"); --------- ソース ここまで --------- --------- ここからXMLファイル -------- <?xml version="1.0" encoding="utf-8"?> <!-- ↓これ(server)がルート名 --> <server maintenance="No"> <!-- データベース接続設定 --> <database providerInvariantName="System.Data.SqlClient" connectionString="xxxxx"> <property key="dbUrl" value="xxxxx" /> <property key="userName" value="sa" /> <property key="userPassword" value="xxxxxxxx" /> <property key="driverClass" value="com.microsoft.jdbc.sqlserver.SQLServerDriver" /> </database> <!-- LDAP設定 --> <ldap> <!-- シングルサインオン --> <sso Password="xxxxx" SyncTime="3600" /> </ldap> </server>

    • ベストアンサー
    • XML
  • Tomcat5.0でのweb.xmlについて

    現在、以下の環境で開発しております。 ・Eclipce 3.2 + Tomcat5.0 + Struts ・OS:WindowsXP プロジェクトのweb.xmlを以下の様に書き換えるとJspを認識してくれなくなってしまいます。原因が全く掴めず難儀しております。 どうかご助言の程願います。 <?xml version="1.0" encoding="ISO-8859-1"?> <!DOCTYPE web-app PUBLIC "-//Sun Microsystems, Inc.//DTD Web Application 2.3//EN" "http://java.sun.com/dtd/web-app_2_3.dtd"> <web-app> <display-name>Struts Blank Application</display-name> -----------------------このブロックを挿入すると404エラーになる <filter> <filter-name>Set Character Encoding</filter-name> <filter-class>filters.SetCharacterEncodingFilter</filter-class> <init-param> <param-name>encoding</param-name> <param-value>Shift_JIS</param-value> </init-param> </filter> <filter-mapping> <filter-name>Set Character Encoding</filter-name> <url-pattern>/*</url-pattern> </filter-mapping> --------------------------------------------------- <!-- Standard Action Servlet Configuration (with debugging) --> <servlet> ・ ・ 日本語の文字化け防止に入れたいのですが、現象の為、入れられず困っています。