当前位置: 首页 > 知识库问答 >
问题:

Spring Bootjdbc连接

尉迟韬
2023-03-14

我试图配置Spring引导,以便有tomcat连接池到我的生产数据库。我的应用程序不是网络(我也有一些难以告诉Spring)。

我有一个创业班和三个以上的班

代码

@Configuration

@EnableAutoConfiguration(exclude = DataSourceAutoConfiguration.class)

public class Starter {

private static Logger logger;

@Autowired
private static MyController controller;

public static void main(String[] args) {

//      SpringApplication.setWebEnvironment(false);

    SpringApplication.run(Starter.class, args);

    LogbackConfigLoader lcl = new LogbackConfigLoader();
    if (lcl.init()) {
        logger = LoggerFactory.getLogger(Starter.class);
        logger.debug("Initialized....");
    }
    else{
        logger = LoggerFactory.getLogger(Starter.class);
    }


    logger.info(controller.getProva());

}


}

这里是配置`

@Configuration

@ConfigurationProperties(prefix="datasource.NIS")

public class NISDBConfiguration {

private String jdbcInterceptors;
private long validationInterval = 30000;

private org.apache.tomcat.jdbc.pool.DataSource pool;

@Value("${driver-class-name}")
private String driverClassName;

@Value("${url}")
private String url;

@Value("${username}")
private String username;

@Value("${password}")
private String password;

@Value("${maxActive}")
private int maxActive = 30;

@Value("${maxIdle}")
private int maxIdle = 8;

@Value("${minIdle}")
private int minIdle = 8;

@Value("${initialSize}")
private int initialSize = 10;

private String validationQuery;

private boolean testOnBorrow;

private boolean testOnReturn;

private boolean testWhileIdle;

private Integer timeBetweenEvictionRunsMillis;

private Integer minEvictableIdleTimeMillis;

private Integer maxWaitMillis;

public String getJdbcInterceptors() {
    return jdbcInterceptors;
}

public void setJdbcInterceptors(String jdbcInterceptors) {
    this.jdbcInterceptors = jdbcInterceptors;
}

public long getValidationInterval() {
    return validationInterval;
}

public void setValidationInterval(long validationInterval) {
    this.validationInterval = validationInterval;
}

public org.apache.tomcat.jdbc.pool.DataSource getPool() {
    return pool;
}

public void setPool(org.apache.tomcat.jdbc.pool.DataSource pool) {
    this.pool = pool;
}

public String getDriverClassName() {
    return driverClassName;
}

public void setDriverClassName(String driverClassName) {
    this.driverClassName = driverClassName;
}

public String getUrl() {
    return url;
}

public void setUrl(String url) {
    this.url = url;
}

public String getUsername() {
    return username;
}

public void setUsername(String username) {
    this.username = username;
}

public String getPassword() {
    return password;
}

public void setPassword(String password) {
    this.password = password;
}

public int getMaxActive() {
    return maxActive;
}

public void setMaxActive(int maxActive) {
    this.maxActive = maxActive;
}

public int getMaxIdle() {
    return maxIdle;
}

public void setMaxIdle(int maxIdle) {
    this.maxIdle = maxIdle;
}

public int getMinIdle() {
    return minIdle;
}

public void setMinIdle(int minIdle) {
    this.minIdle = minIdle;
}

public int getInitialSize() {
    return initialSize;
}

public void setInitialSize(int initialSize) {
    this.initialSize = initialSize;
}

public String getValidationQuery() {
    return validationQuery;
}

public void setValidationQuery(String validationQuery) {
    this.validationQuery = validationQuery;
}

public boolean isTestOnBorrow() {
    return testOnBorrow;
}

public void setTestOnBorrow(boolean testOnBorrow) {
    this.testOnBorrow = testOnBorrow;
}

public boolean isTestOnReturn() {
    return testOnReturn;
}

public void setTestOnReturn(boolean testOnReturn) {
    this.testOnReturn = testOnReturn;
}

public boolean isTestWhileIdle() {
    return testWhileIdle;
}

public void setTestWhileIdle(boolean testWhileIdle) {
    this.testWhileIdle = testWhileIdle;
}

public Integer getTimeBetweenEvictionRunsMillis() {
    return timeBetweenEvictionRunsMillis;
}

public void setTimeBetweenEvictionRunsMillis(
        Integer timeBetweenEvictionRunsMillis) {
    this.timeBetweenEvictionRunsMillis = timeBetweenEvictionRunsMillis;
}

public Integer getMinEvictableIdleTimeMillis() {
    return minEvictableIdleTimeMillis;
}

public void setMinEvictableIdleTimeMillis(Integer minEvictableIdleTimeMillis) {
    this.minEvictableIdleTimeMillis = minEvictableIdleTimeMillis;
}

public Integer getMaxWaitMillis() {
    return maxWaitMillis;
}

public void setMaxWaitMillis(Integer maxWaitMillis) {
    this.maxWaitMillis = maxWaitMillis;
} 

@Bean(name = "dsNIS") 
public DataSource dataSource() { 
    this.pool = new org.apache.tomcat.jdbc.pool.DataSource();
    this.pool.setDriverClassName(getDriverClassName());
    this.pool.setUrl(getUrl());
    this.pool.setUsername(getUsername());
    this.pool.setPassword(getPassword());
    this.pool.setInitialSize(getInitialSize());
    this.pool.setMaxActive(getMaxActive());
    this.pool.setMaxIdle(getMaxIdle());
    this.pool.setMinIdle(getMinIdle());
    this.pool.setTestOnBorrow(isTestOnBorrow());
    this.pool.setTestOnReturn(isTestOnReturn());
    this.pool.setTestWhileIdle(isTestWhileIdle());

    if (getTimeBetweenEvictionRunsMillis() != null) {
        this.pool
                .setTimeBetweenEvictionRunsMillis(getTimeBetweenEvictionRunsMillis());
    }
    if (getMinEvictableIdleTimeMillis() != null) {
        this.pool.setMinEvictableIdleTimeMillis(getMinEvictableIdleTimeMillis());
    }
    this.pool.setValidationQuery(getValidationQuery());
    this.pool.setValidationInterval(this.validationInterval);
    if (getMaxWaitMillis() != null) {
        this.pool.setMaxWait(getMaxWaitMillis());
    }
    if (this.jdbcInterceptors != null) {
        this.pool.setJdbcInterceptors(this.jdbcInterceptors);
    }
    return this.pool;

} 

@PreDestroy
public void close() {
    if (this.pool != null) {
        this.pool.close();
    }
}

@Bean(name = "jdbcNIS") 
public JdbcTemplate jdbcTemplate(DataSource dsNIS) { 
    return new JdbcTemplate(dsNIS); 
}

} `

仓库

package org.hp.data;

@Repository

public class NisRepository {

protected final Logger log = LoggerFactory.getLogger(getClass()); 


@Autowired 
@Qualifier("jdbcNIS") 
protected JdbcTemplate jdbc; 


public String getItem(long id) { 
    return jdbc.queryForObject("SELECT * FROM sb_item WHERE id=?", itemMapper, id); 
} 

private static final RowMapper<String> itemMapper = new RowMapper<String>() {
    @Override
    public String mapRow(ResultSet rs, int rowNum) throws SQLException { 
        String item = rs.getString("title"); 
        return item; 
    } 
};


public JdbcTemplate getJdbc() {
    return jdbc;
}

public void setJdbc(JdbcTemplate jdbc) {
    this.jdbc = jdbc;
} 

}

控制器

@Controller
public class MyController {


@Autowired 
private NisRepository items; 

public NisRepository getItems() {
    return items;
}

public void setItems(NisRepository items) {
    this.items = items;
}

public String getProva(){
    return items.getItem(10);
}

}

但我在运行NullPointerException应用程序时总是遇到异常,因为MyController不是自动连接的,并且总是空的。

我还尝试用new创建一个新实例(但我认为这是不正确的,因为Springmvc模式)。

这里有什么问题?

提前谢谢

共有1个答案

孟泽宇
2023-03-14

您正在使用Spring Boot,但非常努力地不使用它。您还声明您没有使用Web应用程序,但为什么您有一个@Controller

要解决您的问题,请删除数据源的配置,而JdbcTemplateSpring Boot将为您配置这些配置。这基本上意味着删除NISDBConfiguration类。只需将正确的属性添加到应用程序。属性文件。

spring.datasource.driver-class-name=<your-driver-here>
spring.datasource.url=<your-url>
spring.datasource.username=<your-username>
spring.datasource.password=<your-password>

当然还有你需要的其他属性,请查看参考指南了解更多属性。

从存储库中的JdbcTem板属性中删除@Qualifer,您也不需要getter和setter。我建议使用基于构造函数的注入。

package org.hp.data;

@Repository
public class NisRepository {

    protected final Logger log = LoggerFactory.getLogger(getClass()); 

    protected final JdbcTemplate jdbc; 

    @Autowired
    public NisRepository(JdbcTemplate jbc) {
        this.jdbc=jdbc;
    }

    public String getItem(long id) { 
        return jdbc.queryForObject("SELECT * FROM sb_item WHERE id=?", itemMapper, id); 
    } 


    private static final RowMapper<String> itemMapper = new RowMapper<String>() {
        @Override
        public String mapRow(ResultSet rs, int rowNum) throws SQLException { 
            String item = rs.getString("title"); 
            return item; 
        } 
    };

}

如果您没有web应用程序,请将@Controller替换为@Service

然后重写你的入门课程。

@SpringBootApplication
public class Starter {

    private static Logger logger;

    public static void main(String[] args) {

    //      SpringApplication.setWebEnvironment(false);

        ApplicationContext ctx = SpringApplication.run(Starter.class, args);

        LogbackConfigLoader lcl = new LogbackConfigLoader();
        if (lcl.init()) {
            logger = LoggerFactory.getLogger(Starter.class);
            logger.debug("Initialized....");
        }
        else{
            logger = LoggerFactory.getLogger(Starter.class);
        }

        MyController controller = ctx.getBean(MyController.class);
        logger.info(controller.getProva());

    }


}

看起来你也在试图绕过这里的Spring靴配置加载?尝试使用框架,而不是反对它。

如果您没有web应用程序,请不要在依赖项中包含spring boot starter web,并确保其中没有任何其他与web相关的内容。SpringBootAuto检测web环境并尝试为此引导类,如果没有这些类,它将作为普通java应用程序运行。

 类似资料:
  • 代码片段如下所示: 如果有人有决议,请帮忙?

  • 本文向大家介绍HTTP长连接、短连接?相关面试题,主要包含被问及HTTP长连接、短连接?时的应答技巧和注意事项,需要的朋友参考一下 在HTTP/1.0中默认使用短连接。也就是说,客户端和服务器每进行一次HTTP操作,就建立一次连接,任务结束就中断连接。当客户端浏览器访问的某个HTML或其他类型的Web页中包含有其他的Web资源(如JavaScript文件、图像文件、CSS文件等),每遇到这样一个W

  • 问题内容: 我在两个表之间有多对多关系。 表包含我的餐厅。 表包含不同的类别。 表包含两列,每列分别包含两个表的ID。 以下陈述是我能想到的,但没有给我我想要的输出。 我希望输出是有关餐厅的信息,并在最后一列中是类别的连接行。 问题答案: 要串联值,可以使用。xml路径解决方案有误,应使用和特殊字符。 您也可以使用变量解决方案

  • 有人能告诉我在maven中scm连接和developerConnection之间的区别吗? 我正在尝试使用,它需要其中之一。 [错误]未能执行goal org . Apache . maven . plugins:maven-release-plugin:2 . 3 . 2:在项目was-topology-legacy-dsl上准备(default-cli ):缺少必需的设置:必须指定scm连接或

  • 在Apache Flink流处理中,连接操作与连接有何不同,因此CoProcessFunction和ProcessJoinFunction有何不同,这是CoProcessFunction提供的onTimer函数吗?您能否提供一个适用于以相互排斥的方式连接/连接的示例用例。

  • 我有一个kafka connect插件,部署在kafka集群中(在独立模式下,仅用于测试,目的是分布式完成)。这个Kafka连接插件使用curator连接到集群的zookeper,并从中提取一些信息,以决定如何处理这些消息。 代码如下: 在treeCache启动时超时,配置根路径存在于本地zookeeper中(已确认在zookeeper外壳中执行ls,对于我尝试使用的zkConnection字符串

  • 圆盘 D72 直线导轨滑块连接器 A 连接片 3*6 连接片 7*9-B 连接片 45° 连接片 135° 连接片 I1 连接片 O1 8mm轴轮连接片 三角连接片 6*8 十字连接片 T型连接片 连接片0324-184

  • 连接是一个合并小矩阵成大矩阵的过程。事实上,你创建第一个矩阵时就是通过将它的各自独立的元素连接在一起的。中括号[]是连接的算子。例如,以4*4魔方A开始,构造 B = [A A+32; A+48 A+16] 结果是含有加入的四个子矩阵的8×8矩阵。 B = 16 3 2 13 48 35 34 45 5 10 11