Gradle、Spring和DB2的起步挑战

4
我的项目想法是编写一个简单的Spring纯Java应用程序,使用Gradle连接到DB2数据库并提取一些数据并打印在控制台上。
首先,我使用Eclipse Luna创建了一个Gradle项目。
我的挑战:
1.如何读取位于src/main/resources中的database.properties文件,其中包含db.driver、db.url、db.username和db.password?
2.如何告诉Gradle选择我的db2cc4.jar驱动程序?我无法使用Gradle依赖项来管理它,因为它是一个专有的jar文件。
以下是我的build.gradle文件:
apply plugin: 'java'
apply plugin: 'eclipse'

repositories {
    mavenCentral()
 }

jar {
    baseName = 'QueryExecutor'
    version =  '0.1.0'
 }

dependencies {
    compile 'org.springframework:spring-context:4.1.0.RELEASE'
    compile 'org.springframework:spring-jdbc:4.1.0.RELEASE'
    runtime files('lib/db2cc4.jar') 
    testCompile 'junit:junit:4.+'
  }

task wrapper(type: Wrapper) {
    gradleVersion = '2.1'
}

这是我的ApplicationConfig.java文件。
import javax.annotation.Resource;

import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.context.annotation.Import;
import org.springframework.context.annotation.PropertySource;
import org.springframework.core.env.Environment;

import org.shrinathk.queryexecutor.persistence.QueryExecutorDAO;

@Configuration
@Import({DatabaseConfig.class})
@PropertySource("classpath:application.properties")
@PropertySource("classpath:database.properties")
public class ApplicationConfig
{
    @Resource
    private Environment env;

    @Bean
    public QueryExecutorDAO queryExecutor()
    {
    return new org.shrinathk.queryexecutor.persistence.QueryExecutorDAO();
    }
}

这是我的DatabaseConfig.java文件:
import javax.annotation.Resource;
import javax.sql.DataSource;

import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.core.env.Environment;
import org.springframework.jdbc.datasource.DriverManagerDataSource;
import org.springframework.transaction.annotation.EnableTransactionManagement;

@Configuration
@EnableTransactionManagement
public class DatabaseConfig
{

    private static final String PROPERTY_NAME_DATABASE_DRIVER   = "db.driver";
    private static final String PROPERTY_NAME_DATABASE_URL      = "db.url";
    private static final String PROPERTY_NAME_DATABASE_USERNAME = "db.username";
    private static final String PROPERTY_NAME_DATABASE_PASSWORD = "db.password";

    @Resource
    private Environment env;

    @Bean
    public DataSource dataSource()
    {
    DriverManagerDataSource dataSource = new DriverManagerDataSource();

    dataSource.setDriverClassName(env.getRequiredProperty(PROPERTY_NAME_DATABASE_DRIVER));
    dataSource.setUrl(env.getRequiredProperty(PROPERTY_NAME_DATABASE_URL));
    dataSource.setUsername(env.getRequiredProperty(PROPERTY_NAME_DATABASE_USERNAME));
    dataSource.setPassword(env.getRequiredProperty(PROPERTY_NAME_DATABASE_PASSWORD));

    return dataSource;
    }
}

数据库属性文件
db.driver=com.ibm.db2.jcc.DB2Driver
db.url=jdbc:db2://localhost:50000/SAMPLE
db.username=db2admin
db.password=db2admin

这是我的项目结构: Project Structure 谢谢!
1个回答

3
  1. 项目结构(例如 src/main/resources)与maven中的相同。当您准备部署项目时,它应该会自动移动到适当的位置。

  2. 关于添加db2jcc.ar依赖项,您需要使用flatDir或在dependencies部分下添加以下代码:

    compile fileTree(dir: 'lib', include: '*.jar')


谢谢!compile fileTree(dir: 'lib', include: '*.jar') 已经生效。 - Shrinath
1
还有一个问题 - 属性文件被打包在最终的jar包中。我该如何保持它们分离?属性文件的整个想法是确保没有依赖于jar包,并且任何属性的更改都不需要进行jar构建。每当jar包执行时,它将从指定位置(在我们的情况下,与jar包相同的目录)中获取属性。 - Shrinath
processResources会完全删除属性文件,这会导致我的JUnits失败(因为它们需要连接和查询数据库)。 jar { exclude '*.properties' }可以解决这个问题。它使用项目中的属性来运行JUnits,但将它们从jar包中排除。 - Shrinath
这意味着您需要使用“排除”在“war”或“jar”中进行配置。 - Opal
是的。需要在warjar中排除我在先前评论中提到的属性。 - Shrinath
显示剩余2条评论

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接