如何在 Spring MVC 中使用 @Bean 连接到 jdbc?

Posted

技术标签:

【中文标题】如何在 Spring MVC 中使用 @Bean 连接到 jdbc?【英文标题】:How to connect to jdbc using @Bean in Spring MVC? 【发布时间】:2016-04-24 21:44:39 【问题描述】:

我正在使用 Spring MVC。我正在尝试使用 DriverManagerDataSource 连接到 jdbc。我在用 @Bean 注解。我基本上是在尝试使用注释在 xml 文件中实现类似的功能。

<bean id="dataSource"
    class="org.springframework.jdbc.datasource.DriverManagerDataSource">
    <property name="driverClassName" value="com.mysql.jdbc.Driver" />
    <property name="url" value="jdbc:mysql://localhost:3306/jcg" />
    <property name="username" value="root" />
    <property name="password" value="toor" />
</bean>

我在我的配置类中使用@configuration 注解,这样做是为了在我的配置文件中使用@Bean 进行连接。

@Bean
public DriverManagerDataSource dataSource()
    Properties jdbcProperties = PropertyUtils.getProperties(profile, "jdbc");
    
    DriverManagerDataSource ret = new DriverManagerDataSource();
    ret.setDriverClassName(jdbcProperties.getProperty("driverClassName"));
    ret.setUsername(jdbcProperties.getProperty("username"));
    ret.setPassword(jdbcProperties.getProperty("password"));
    ret.setUrl(jdbcProperties.getProperty("url"));
    return ret;

我在另一个 *** 问题中看到了这一点。这是正确的方法吗? 但我得到了错误。

属性无法解析

无法解析PropertyUtils

我不确定如何导入这些?另外我不明白这里的配置文件代表什么?你能帮忙吗?

【问题讨论】:

您不必使用 PropertyUtils(我猜来自 Apache Commons)在 Spring 应用程序中导入属性。请改用PropertySourcesPlaceholderConfigurer。 【参考方案1】:

没有足够的信息来说明profile 变量和错误消息看起来像您没有导入PropertyUtils 类。

将属性导入 Spring 应用程序的正确方法之一是使用PropertySourcesPlaceholderConfigurer,正如我在评论中提到的那样。像这样在你的配置类中声明一个 bean。

@Bean
public static PropertySourcesPlaceholderConfigurer propertySourcesPlaceholderConfigurer() 
    return new PropertySourcesPlaceholderConfigurer();

然后在你的配置类中指定属性文件名,并将配置文件放在类路径中。

@Configuration
@PropertySources(@PropertySource("classpath:database.properties"))
public class YourConfig ...

为了使用属性文件中指定的属性,你需要注入一个Environment实例。

@Resource
private Environment environment;

然后用它来获取属性值。

@Bean
public DriverManagerDataSource dataSource()
   DriverManagerDataSource ret = new DriverManagerDataSource();
   ret.setDriverClassName(environment.getRequiredProperty("driverClassName"));
   ret.setUsername(environment.getRequiredProperty("username"));
   ret.setPassword(environment.getRequiredProperty("password"));
   ret.setUrl(environment.getRequiredProperty("url"));
   return ret;

【讨论】:

谢谢bunti,我能够解决这个问题。感谢您的帮助。【参考方案2】:

我可以用这个来解决这个问题

@Bean
public DriverManagerDataSource dataSource()
    DriverManagerDataSource ret = new DriverManagerDataSource();
    ret.setDriverClassName("driverClassName");
    ret.setUsername("username");
    ret.setPassword("password");
    ret.setUrl("url");
    return ret;

【讨论】:

以上是关于如何在 Spring MVC 中使用 @Bean 连接到 jdbc?的主要内容,如果未能解决你的问题,请参考以下文章

spring mvc如何使用resource

如何在 Spring MVC 中存储会话

Spring MVC 了解WebApplicationContext中特殊的bean类型

设置 Spring JPA 项目以在 MVC 项目中使用 - 创建 bean 时出错

在 Spring Boot MVC 测试中自定义 bean

Spring 3 MVC:在 MVC 控制器方法参数中公开会话范围的 bean