2016-09-26 67 views
1

我重寫了API的後端代碼中的數據庫URL。它是用Glassfish的存儲數據庫的URL,用戶名,密碼,...爪哇 - 在DAL項目

我想用一個更好的解決方案,使我們可以很容易地改變我們的Web服務器和數據庫,而無需修改代碼。

我的想法是將數據庫信息(網址,用戶名,..)存儲在web.xml中,並在baseDAO內檢索它們。

這裏是我的項目結構

  • RestAPIProject
  • BusinessProject
  • DALProject
  • DTOProject

裏面我DALProject我會創建該類

public class BaseDAO { 

    public Connection getConnection() { 
     Class.forName("com.mysql.jdbc.Driver"); 
     String url = "jdbc:mysql://localhost:3306/DB"; 
     String name = "root"; 
     String password = ""; 

     Connection con = DriverManager.getConnection(url, name, password); 
     return con; 
    } 
} 

public class UserDAO extends BaseDAO { 

    public User getAll() { 
     Connection con = getConnection(); 
     ... 
    } 
} 

我如何存儲這些數據庫的信息?使模塊化的最佳實踐是什麼?我需要隨時輕鬆更改數據庫。

+0

可以使用JNDI數據源:

# Details for datasource application.db.driver = com.mysql.jdbc.Driver application.db.url = jdbc:mysql://localhost:3306/DB application.db.username = root application.db.password = 

然後你就可以在你的配置Bean使用在服務器上,Java EE中的標準。但是你用什麼服務器? –

+0

目前,它是一個PostgreSQL數據庫,但它可能更改爲Oracle – Weedoze

+0

我講的是應用程序服務器,Glassfish可以使用JNDI數據源。 –

回答

0

最好的辦法是將其存儲在application.properties文件,並更改它,當你需要:

@Configuration 
@PropertySource("application.properties") 
public class DataConfig { 
    @Autowired 
    private Environment env; 

    @Bean 
    public DataSource dataSource() { 
     BasicDataSource dataSource = new BasicDataSource(); 
     dataSource.setDriverClassName(env.getProperty("application.db.driver")); 
     dataSource.setUrl(env.getProperty("application.db.url")); 
     dataSource.setUsername(env.getProperty("application.db.username")); 
     dataSource.setPassword(env.getProperty("application.db.password")); 
     return dataSource; 
    } 
}