在托管bean之外的Spring Web app数据库访问

时间:2014-03-11 08:50:04

标签: spring web-applications database-connection managed-bean

在我的网络应用程序中,我有applicationContext.xml我定义了bean数据库连接参数等。 虽然我可以在pojo类中使用托管bean(使用服务和daos)进行所需的操作;我不能使用这些服务和托管bean。有没有办法使用应用程序上下文中的参数从pojo访问数据库?我看的每个例子都使用@managedProperty和托管bean。但是,将我的pojo类定义为托管bean将是一个糟糕的设计。

3 个答案:

答案 0 :(得分:1)

您可以使用@Configurable注释将DataSource注入POJO(通常不由Spring管理)。查看执行此操作的方法here

就个人而言,如果可能的话,我会避免从POJO访问数据库

答案 1 :(得分:0)

这可以通过使用现有的数据源bean来实现。

只需自动连接dataSource或使用applicationContext(帮助程序类)获取数据源并从中获取连接。 然后使用prepared语句来做你的本机sql。

@Autowired
private DataSource dataSource;

  public void doBla(){
    // Open a database connection using Spring's DataSourceUtils
    Connection connection = DataSourceUtils.getConnection(dataSource); // NOSONAR
    PreparedStatement countQuery = null;
    try {
        connection.setAutoCommit(false);
        countQuery = connection.prepareStatement("//put sql here");
        ResultSet countResult = countQuery.executeQuery();
    } catch (Exception e){
        //TODO do something here...
  }
 DataSourceUtils.releaseConnection(connection, dataSource);
}

答案 2 :(得分:0)

好吧,我解决了; 我试过了

    private static ISettingsService settingsService;
    private static ApplicationContext context;

在构造函数中我调用了

context = new ClassPathXmlApplicationContext("../applicationContext.xml");
settingsService =  (ISettingsService)context.getBean("SettingsService");

所以我成功获得了服务,这需要我所有的crud操作。 btw在applicationContext.xml中我有这一行

<bean id="SettingsService" class="my.path.to.services.SettingsService">
    <property name="settingsDAO" ref="SettingsDAO" />
</bean>