2017-05-16 1 views
1

Je travaille sur le démarrage à ressort à la fois sur une ligne de commande et une application web. Les deux applications nécessitent d'être implémentées avec un portefeuille oracle, j'ai donc implémenté le portefeuille oracle. Le coureur de ligne de commande est capable de se connecter à la base de données en utilisant le modèle spring jdbc en utilisant la source de données oracle mais la même configuration n'a pas été capable de créer le bean pour l'objet datasource. Lorsque cela a été mis en œuvre avec le nom d'utilisateur et le mot de passe de la base de données, je peux me connecter.L'application web de démarrage ne fonctionne pas avec le portefeuille oracle

Je prends l'aide de ce post - [Connect to Oracle DB from Spring-jdbc with Oracle Wallet authentification

avec un code similaire à,

System.setProperty ("oracle.net.tns_admin", "chemin/vers/votre/tnsnames");

OracleDataSource ds = nouvelle OracleDataSource();

Propriétés props = new Propriétés(); props.put ("oracle.net.wallet_location", "(source = (méthode = fichier) (method_data = (répertoire = chemin/vers/votre/porte-monnaie)))"); ds.setConnectionProperties (props); ds.setURL ("jdbc: oracle: thin:/@ dbAlias"); // dbAlias ​​doit correspondre à ce qui se trouve dans vos noms de domaine.

return ds;

J'ai toutes mes propriétés définies de application.properties d'application de démarrage et je reçois NullPointerException sur la création de la source de données.

Tout pointeur ou de l'aide à cet égard seront très appréciés.

Merci à l'avance, Sandip

Répondre

0

Après avoir essayé, je ne pouvais comprendre ce que nous devons faire quand nous avons besoin d'inclure le portefeuille d'Oracle dans le coffre de printemps.

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

Pour tout test de charge multithread, utilisez toujours le pilote Oracle 11.2.0.4 ou jusqu'à ojdbc, comme 11.2.0.3 pilote ojdbc ne prend pas en charge l'accès multithread à des portefeuilles d'oracle. Est-ce que voir quelques journaux comme erreur PKIX, 02002 et ne peut pas ouvrir le fichier cwallet.sso si vous utilisez la version 10.2.0.3 de ojdbc sur multithreads. – sandipkbhaumik