标签: spring-jdbc

Singleton 与原型 JdbcTemplate

根据Spring 文档,JDBCTemplate 类“可以通过使用 DataSource 引用直接实例化在服务实现中使用,或者在应用程序上下文中做好准备并作为 bean 引用提供给服务”。

public class JdbcCorporateEventDao implements CorporateEventDao {

    private JdbcTemplate jdbcTemplate;

    public void setDataSource(DataSource dataSource) {
        this.jdbcTemplate = new JdbcTemplate(dataSource);
    }

}
Run Code Online (Sandbox Code Playgroud)

我想知道,与在上下文中定义jdbctemplate为单例并直接将其注入到Dao

 public class JdbcCorporateEventDao implements CorporateEventDao {
        @Autowired
        private JdbcTemplate jdbcTemplate;
    
        public void setJdbcTemplate(JdbcTemplate jdbcTemplate) {
            this.jdbcTemplate = jdbcTemplate;
        }
    
    }
Run Code Online (Sandbox Code Playgroud)

singleton spring jdbc spring-jdbc

3
推荐指数
1
解决办法
5096
查看次数

如何在 Spring 中配置数据源?

我正在学习 Spring Core 认证,我对如何正确回答这个问题有些疑问:

\n\n
\n

如何在 Spring 中配置数据源?哪种 bean 对于开发非常有用?

\n
\n\n

我认为我可以这样做来在 Spring XML 配置文件中配置DataSource :

\n\n
<bean id=\xe2\x80\x9cdataSource\xe2\x80\x9d class=\xe2\x80\x9corg.apache.commons.dbcp.BasicDataSource\xe2\x80\x9d>\n    <property name=\xe2\x80\x9curl\xe2\x80\x9d value=\xe2\x80\x9c${dataSource.url}\xe2\x80\x9d />\n    <property name=\xe2\x80\x9cusername\xe2\x80\x9d value=\xe2\x80\x9c${dataSource.username}\xe2\x80\x9d />\n    <property name=\xe2\x80\x9cpassword\xe2\x80\x9d value=\xe2\x80\x9c${dataSource.password}\xe2\x80\x9d />\n</bean>\n\n<jdbc:initialize-database data-source=\xe2\x80\x9cdataSource\xe2\x80\x9d>\n    <jdbc:script location=\xe2\x80\x9cclasspath:schema.sql\xe2\x80\x9d />\n    <jdbc:script location=\xe2\x80\x9cclasspath:test-data.sql\xe2\x80\x9d />\n</jdbc:initialize-database>\n
Run Code Online (Sandbox Code Playgroud)\n\n

所以我认为答案 bean 是org.apache.commons.dbcp.BasicDataSource。这个断言是真的还是我错过了什么?

\n\n

到底代表什么配置标签?我很清楚它的作用,但到底代表什么?这是一个特殊的 bean 声明还是什么?

\n\n

总氮

\n

java spring jdbc spring-jdbc

3
推荐指数
1
解决办法
2万
查看次数

Spring引导jdbc连接

我正在尝试配置 Spring Boot 以便将 Tomcat 连接池连接到我的生产数据库。我的应用程序不是网络(我也有一些很难告诉春天)。

我有一个启动课程和另外 3 个课程

代码

@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());

}


}
Run Code Online (Sandbox Code Playgroud)

这是配置`

@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; …
Run Code Online (Sandbox Code Playgroud)

java spring spring-jdbc autowired spring-boot

3
推荐指数
1
解决办法
3万
查看次数

在Spring中将数组设置为SqlParameterSource

我要执行以下选择语句

SELECT array_to_json(array_agg(row_to_json(opt)))
FROM (
    SELECT * FROM option WHERE optionid IN (:tags)
)opt
Run Code Online (Sandbox Code Playgroud)

通过

MapSqlParameterSource params = new MapSqlParameterSource();
Integer[] a={2200,23};
params.addValue("tags", Arrays.asList(a));
getSimpleJdbcTemplate().queryForObject(statement, String.class, params);
Run Code Online (Sandbox Code Playgroud)

但是我总是遇到错误:

类org.springframework.dao.InvalidDataAccessApiUsageException没有为SQL参数'tags'提供值:没有为键'tags'注册的值

如果我使用相同:

Integer[] a = { 2200, 23 };
params.addValue("tags", Arrays.asList(a));
namedParameterJdbcTemplate.queryForObject(statement, params, String.class);
Run Code Online (Sandbox Code Playgroud)

java spring spring-jdbc

3
推荐指数
1
解决办法
6676
查看次数

mapsqlparametersource 与 java.util.map

我在 spring 文档中读到 MapSqlParameterSource 只是 Map 的包装器。使用MapSqlParameterSource代替Map有什么优点?

public int countOfActorsByFirstName(String firstName) {

    String sql = "select count(*) from T_ACTOR where first_name = :first_name";

    SqlParameterSource namedParameters = new MapSqlParameterSource("first_name", firstName);

    return this.namedParameterJdbcTemplate.queryForObject(sql, namedParameters, Integer.class);
}




public int countOfActorsByFirstName(String firstName) {

    String sql = "select count(*) from T_ACTOR where first_name = :first_name";

    Map<String, String> namedParameters = Collections.singletonMap("first_name", firstName);

    return this.namedParameterJdbcTemplate.queryForObject(sql, namedParameters,  Integer.class);
}
Run Code Online (Sandbox Code Playgroud)

java spring spring-jdbc

3
推荐指数
1
解决办法
5136
查看次数

Spring Boot 2、LiquiGraph 和 Actuator 运行状况端点的 503 错误 - org.springframework.jdbc.UncategorizedSQLException

在我的 Spring Boot 2.0.0.M6 应用程序中,我使用以下 Maven 依赖项安装了 LiquiGraph:

    dependency>
        <groupId>org.liquigraph</groupId>
        <artifactId>liquigraph-spring-boot-starter</artifactId>
        <version>3.0.2</version>
    </dependency>

    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-jdbc</artifactId>
    </dependency>

    <dependency>
        <groupId>org.neo4j</groupId>
        <artifactId>neo4j-jdbc-bolt</artifactId>
        <version>3.1.0</version>
    </dependency>
Run Code Online (Sandbox Code Playgroud)

我也使用 Spring Data Neo4j 5,这是我的 Neo4j 配置:

@Configuration
@EnableNeo4jRepositories(basePackages = "com.example.domain.repository.neo4j")
@EnableTransactionManagement
public class Neo4jConfig {

    @Value("${neo4j.bolt.server.database.uri}")
    private String boltServerDatabaseUri;

    @Value("${neo4j.jdbc.server.database.uri}")
    private String jdbcServerDatabaseUri;

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

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

    @Bean
    public Neo4jTransactionManager transactionManager() {
        return new Neo4jTransactionManager(sessionFactory());
    }

    @Bean
    public SessionFactory sessionFactory() {

        return new SessionFactory(configuration(), "com.example.domain.model.neo4j");
    }

    @Bean
    @DependsOn("liquigraph")
    public org.neo4j.ogm.config.Configuration configuration() {

        // …
Run Code Online (Sandbox Code Playgroud)

spring-jdbc spring-data-neo4j spring-boot spring-boot-actuator liquigraph

3
推荐指数
1
解决办法
2200
查看次数

从 Spring Boot 获取与 H2 数据库的连接

我正在使用 Spring Boot、H2 和 JPA 作为我的数据库,我可以通过将连接属性放入application.properties. 但我不知道如何使用Spring Boot为我建立的连接。

在下面的代码中,我可以使用conn运行语句等。

   static final String JDBC_DRIVER = "org.h2.Driver";   
   static final String DB_URL = "jdbc:h2:~/test";
   static final String USER = "sa"; 
   static final String PASS = ""; 

Connection conn = null; 
  Statement stmt = null; 
  try { 

     Class.forName(JDBC_DRIVER); 
     conn = DriverManager.getConnection(DB_URL,USER,PASS);  
    //This is what I want to do with spring as I obtain a conn variable and use it.
     stmt = conn.createStatement(); 
     String sql =  "CREATE TABLE   REGISTRATION " + …
Run Code Online (Sandbox Code Playgroud)

java jdbc h2 spring-jdbc spring-boot

3
推荐指数
1
解决办法
6980
查看次数

使用 spring boot 动态连接到不同的数据库

如何使用 Spring 连接到多个动态不同的数据库(从我的数据库加载数据库的类型和连接信息)?

what I am trying to build?
I am building a Spring-Boot application that should be able to get data from my customers in the following ways:
1. Connect to my customer SQL DB (MySQL, MSSQL, PostgreSQL,etc...)
2. connect to my customer MongoDB,
3. read data from CSV/JSON files.
Run Code Online (Sandbox Code Playgroud)

当应用程序运行时,它会收到一个带有客户 ID 的 HTTP 请求。连接到。在这一点上,应用程序应该从我的数据库加载这个客户(包含他正在使用的数据库和连接到它的凭据),并且应该初始化到这个数据库的连接以便能够开始查询它。(数据库架构在一个客户与另一个客户之间是不同的,所以我还在我的数据库中维护了一组查询来查询客户

我正在努力实现图表的蓝色部分:

我正在努力实现图表的蓝色部分

java database-connection spring-jdbc spring-data-jpa spring-boot

3
推荐指数
1
解决办法
3454
查看次数

Spring JDBC - BeanPropertyRowMapper 与 Kotlin

概述: 该应用程序处理用户信息的基本 CRUD 功能。

问题: 从预先填充的 H2 数据库读取用户详细信息时,我在使用BeanPropertyRowMapper. 映射器无法初始化 User 实例,因为它无法使用数据类的默认构造函数。

数据类:

在此处输入图片说明

存储库:

在此处输入图片说明

错误:

Caused by: java.lang.IllegalArgumentException: No argument provided for a required parameter: parameter #0 id of fun <init>(kotlin.String, kotlin.String, kotlin.String, kotlin.String, java.util.Date): org.chrysalis.userservice.model.User
Run Code Online (Sandbox Code Playgroud)

提供特定的行映射器可以解决该问题,但我很困惑为什么BeanPropertyRowMapper无法创建响应。

在此处输入图片说明 我还想知道这个问题是否只特定于 Java 反射,以及这对于 spring 中的其他映射实用程序是否相同。

spring-jdbc kotlin

3
推荐指数
1
解决办法
489
查看次数

当从另一个实例中的事务方法调用 spring 非事务方法时,事务是否会传播?

抱歉,如果之前已经讨论过这个问题,但我在 @Transactional spring java 注释的所有相关讨论中找不到答案。

如果我们从具有 @Transactional 注释的方法调用另一个没有 @Transactional 注释的实例中的方法,会发生什么情况?@Transactaional 注解的方法中的事务会被挂起吗?或者会被传播吗?

我发现了很多关于对第二个方法的调用是否来自同一个实例的讨论,但如果第二个非事务性方法位于另一个实例中则没有。感谢您的帮助!

就像下面的例子一样,如果从 A 类中的 methoda() 调用 B 类中的 methodb() 会发生什么?来自 methoda 的事务会传播还是 methodb 会是非事务性的?

示例代码如下:

public class A {

  @Autowired
  B b;

  @Transactional
  public void methoda() {
    b.methodb();
  }
}



@Component
public class B {

  // this method is non transactional and is called from method A in class A
  public void methodb() {
    //do some db updates
  }
}
Run Code Online (Sandbox Code Playgroud)

java spring spring-jdbc spring-transactions

3
推荐指数
1
解决办法
4559
查看次数