2017-05-16 64 views
1

我正在對命令行亞軍和網絡應用程序進行春季啓動。這兩個應用程序都需要用oracle錢包來實現,所以我實現了oracle錢包。命令行運行器能夠使用oracle datasource使用spring jdbc模板連接到數據庫,但是相同的配置無法爲數據源對象創建bean。當數據庫用戶名和密碼實現相同時,我可以連接。春季啓動Web應用程序不能與oracle錢包一起工作

我以幫助,從這個帖子 - [Connect to Oracle DB from Spring-jdbc with Oracle Wallet authentification

類似的代碼,

System.setProperty( 「oracle.net.tns_admin」, 「路徑/到/你/ TNSNAMES」);

OracleDataSource ds = new OracleDataSource();

Properties props = new Properties(); (「oracle.net.wallet_location」,「(source =(method = file)(method_data =(directory = path/to/your/wallet)))」); ds.setConnectionProperties(道具);ds.setURL(「jdbc:oracle:thin:/ @ dbAlias」); // dbAlias應該與您的tnsnames中的內容匹配

return ds;

我有我的所有屬性從引導應用程序的application.properties設置,我得到空指針異常創建數據源。

任何指針或在這方面的幫助將不勝感激。

由於提前, 的Sandip

回答

0

嘗試後,我可以找出我們需要的時候,我們需要在春季啓動oracle的錢包做。

1. In application.properties put two properties, 
    A> spring.datasource.url=jdbc:oracle:thin:/@<DB_ALIAS_NAME> 
    B> spring.datasource.driver-class-name=oracle.jdbc.driver.OracleDriver 

2. On boot runner/configuration class, 
    A> Define the dataSource bean like this, 


@Bean 
    public DataSource dataSource() { 
     OracleDataSource dataSource = null; 
     try { 
      dataSource = new OracleDataSource(); 
      Properties props = new Properties(); 
      String oracle_net_wallet_location = 
      System.getProperty("oracle.net.wallet_location"); 
      props.put("oracle.net.wallet_location", "(source=(method=file)(method_data=(directory="+oracle_net_wallet_location+")))"); 
      dataSource.setConnectionProperties(props); 
      dataSource.setURL(url); 
     } catch(Exception e) { 
      e.printStackTrace(); 
     } 
     return dataSource; 
    } 

    B> Define the jdbcTemplate bean as follows, 


@Bean 
    public JdbcTemplate jdbcTemplate(DataSource dataSource) { 
     JdbcTemplate jdbcTemplate = new JdbcTemplate(dataSource()); 
     jdbcTemplate.setFetchSize(20000); 
     return jdbcTemplate; 
    } 

3. Now we need to set jvm arguments in boot runner class like as follows, 
    -Doracle.net.wallet_location=<PATH_TO_WALLET_DIR> -Doracle.net.tns_admin=<PATH_TO_WALLET_DIR> 
    Note - <WALLET_DIR> should contain .sso, .p12 and .ora files. On external 
    server like tomcat, set above two variables on catalina.sh or catalina.bat 
    depending on your environment OS. 

I hope this helps. 
Thanks, 
Sandip 
+0

對於任何多線程負載測試,始終使用Oracle 11.2.0.4或向上ojdbc驅動程序,如11.2.0.3 ojdbc司機不具備多線程訪問Oracle錢包支持。如果您在多線程上使用10.2.0.3版本的ojdbc,將會看到一些類似PKIX錯誤02002的日誌,並且無法打開cwallet.sso文件。 – sandipkbhaumik