【问题标题】:Spring web app database access outside managed beans托管 bean 之外的 Spring Web 应用程序数据库访问
【发布时间】:2014-03-11 08:50:04
【问题描述】:

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

【问题讨论】:

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


    【解决方案1】:

    您可以使用 @Configurable 注解将 DataSource 注入 POJO(通常不由 Spring 管理)。看到一个方法来做到这一点here

    如果可能的话,我个人会避免走从 POJO 访问数据库的道路

    【讨论】:

      【解决方案2】:

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

      只需自动连接数据源或使用 applicationContext(帮助程序类)来获取数据源并从中获取连接。 然后使用准备好的语句来执行你的原生 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);
      }
      

      【讨论】:

      • 这不是我认为最好的设计,但我使用的是ApplicationContext context = new ClassPathXmlApplicationContext("../applicationContext.xml"); settingsMB = context.getBean(SettingsManagedBean.class);,但 managedbean 中的服务返回 null。
      【解决方案3】:

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

          private static ISettingsService settingsService;
          private static ApplicationContext context;
      

      在我调用的构造函数中

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

      所以我成功地获得了具有我需要的所有 crud 操作的服务。 顺便说一句,在 applicationContext.xml 我有这一行

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

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2013-05-25
        • 2011-08-16
        • 2011-10-22
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多