2017-12-26 4 views
0

In meinem application.properties konfigurieren Ich habe einige spring.datasource FelderSpring - Wie OracleDataSource von spring.datasource in application.properties

spring.jpa.database-platform=org.hibernate.dialect.Oracle10gDialect 
spring.datasource.url=jdbc:oracle:thin:@localhost:1521:XE 
spring.datasource.username=talon 
spring.datasource.password=talon 

Diese sollten

@Configuration 
public class Db { 

    @NotNull 
    private String username; 
    @NotNull 
    private String password; 
    @NotNull 
    private String url; 

    public void setUsername(String username) { 
     this.username = username; 
    } 

    public void setPassword(String password) { 
     this.password = password; 
    } 

    public void setUrl(String url) { 
     this.url = url; 
    } 

    public Db() { 
     OracleDataSource dataSource = null; 
     try { 
      dataSource = new OracleDataSource(); 
      dataSource.setUser(username); 
      dataSource.setPassword(password); 
      dataSource.setURL(url); 
      dataSource.setImplicitCachingEnabled(true); 
      dataSource.setFastConnectionFailoverEnabled(true); 
      Connection connection = dataSource.getConnection(); 
      Statement statement = connection.createStatement(); 
      ResultSet rs = statement.executeQuery("select * from BOOK"); 
      rs.next(); 
      System.out.println(rs.getString(2)); 
     } catch (SQLException e) { 
      e.printStackTrace(); 
     } 
    } 

} 

aus einer @Configuration kommentierten Klasse abgerufen werden Aber ich kann die usernamepassword und url von dort nicht abrufen, sollte ich irgendwo eine weitere Anmerkung hinzufügen oder was mache ich

Wie dies habe ich den Fehler: java.sql.SQLException: Ungültige Oracle-URL angegeben: OracleDataSource.makeURL

Wenn ich die richtige URL mit dataSource.setURL("jdbc:oracle:thin:@localhost:1521:XE"); setze es nicht die username und password da sie lesen kann sind null und ich habe java.sql.SQLException: ORA-01017: ungültiger Benutzername/Passwort; Anmelde verweigert

+0

sollten Sie '@ Value' verwenden – pvpkiran

Antwort

1

Sie haben zwei Probleme:

  1. Sie benötigen eine andere Anmerkung zu verwenden, um für Ihre Felder gefüllt werden. So kommentieren die Klasse mit @ConfigurationProperties("spring.datasource")

  2. können Sie nicht initialisieren Ihre OracleDataSource direkt in Ihrem Konstruktor (dh Db()), da die Eigenschaften (Ihr Benutzername/Passwort/url Felder) nicht während des Gesprächs des Konstrukteurs bevölkert, so eine Sache, Sie können eine andere Methode erstellen und diese mit @PostContruct annotieren, damit Ihre dataSource korrekt erstellt wird.

Ein Beispiel:

@PostConstruct 
private void init() { 
    // your data source initialization 

} 

Eine Beratung Ihre Datenquelle und anstatt zu versuchen, wäre es, die Art und Weise zu ändern, initialisieren es in Ihrem Konstruktor zu erstellen, können Sie eher eine neue Methode erstellen, wo Sie Annotate mit @Bean und machen Sie es Ihre DataSource zurück und Sie können es später verwenden @Autowired.

Verwandte Themen