小编Gon*_*oso的帖子

使用LiquiBase和Spring将大量值(使用FK)插入数据库

我正在尝试使用Liquibase将大量记录(当前位于Excel文件中)添加到我的数据库中(以便我知道如何为将来的数据库更改执行此操作)

我的想法是使用Java读取excel文件,然后从我的Spring初始化类填充ChangeLogParameters,如下所示:

SpringLiquibase liqui = new SpringLiquibase();
liqui.setBeanName("liquibaseBean");
liqui.setDataSource(dataSource());
liqui.setChangeLog("classpath:changelog.xml");

HashMap<String, String> values = new HashMap<String, String>();
values.put("line1col1", ExcelValue1);
values.put("line1col2", ExcelValue2);
values.put("line1col3", ExcelValue3);
values.put("line2col1", ExcelValue4);
values.put("line2col2", ExcelValue5);
values.put("line2col3", ExcelValue6);
...
liqui.setChangeLogParameters(values);
Run Code Online (Sandbox Code Playgroud)

这种方法的问题是我的changelog.xml会非常奇怪(而且非生产性)

<changeSet author="gcardoso" id="2012082707">
    <insert tableName="t_user">
        <column name="login" value="${ExcelValue1}"/>
        <column name="name" value="${ExcelValue2}}"/>
        <column name="password" value="${ExcelValue3}"/>
    </insert>
    <insert tableName="t_user">
        <column name="login" value="${ExcelValue4}"/>
        <column name="name" value="${ExcelValue5}}"/>
        <column name="password" value="${ExcelValue6}"/>
    </insert>
    ...
</changeSet>
Run Code Online (Sandbox Code Playgroud)

有什么方法可以做这样的事情:

HashMap<String, ArrayList<String>> values = new HashMap<String, ArrayList<String>>();
values.put("col1", Column1);
values.put("col2", Column2);
values.put("col3", Column3);
liqui.setChangeLogParameters(values);

<changeSet author="gcardoso" id="2012082707">
    <insert …
Run Code Online (Sandbox Code Playgroud)

java sql database spring liquibase

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

在jBoss AS中创建模块

我正在使用jBoss AS 7发布我的各种项目,并且所有项目都使用Jersey API,因此我不想在每个项目中部署它,而是想为它创建一个模块.为此,我创建了文件夹JBOSS_HOME\modules\com\sun\Jersey\main,在这个文件夹中我放置了Jersey jar和文件module.xml:

<?xml version="1.0" encoding="UTF-8"?>
<module xmlns="urn:jboss:module:1.1" name="com.sun.jersey">
    <properties>
        <property name="jboss.api" value="private"/>
    </properties>
    <resources>
        <resource-root path="jersey-bundle-1.12.jar"/>
        <resource-root path="asm-3.1.jar"/>
        <resource-root path="jackson-core-asl-1.9.2.jar"/>
        <resource-root path="jackson-jaxrs-1.9.2.jar"/>
        <resource-root path="jackson-mapper-asl-1.9.2.jar"/>
        <resource-root path="jackson-xc-1.9.2.jar"/>        
        <resource-root path="jersey-client-1.12.jar"/>
        <resource-root path="jersey-core-1.12.jar"/>
        <resource-root path="jersey-json-1.12.jar"/>
        <resource-root path="jersey-server-1.12.jar"/>
        <resource-root path="jersey-servlet-1.12.jar"/>
        <resource-root path="jettison-1.1.jar"/>
        <resource-root path="jsr311-api-1.1.1.jar"/>
    </resources>
    <dependencies>
        <module name="javax.api"/>
        <module name="org.jboss.staxmapper"/>
        <module name="org.jboss.as.controller"/>
        <module name="org.jboss.as.server"/>
        <module name="org.jboss.modules"/>
        <module name="org.jboss.msc"/>
        <module name="org.jboss.logging"/>
        <module name="org.jboss.vfs"/>
    </dependencies>
</module>
Run Code Online (Sandbox Code Playgroud)

为了防止使用jBoss JAX-RS,我从文件JBOSS_HOME\standalone\standalone.xml中删除了以下行:

<subsystem xmlns="urn:jboss:domain:jaxrs:1.0"/>
<extension module="org.jboss.as.jaxrs"/>
Run Code Online (Sandbox Code Playgroud)

在MyProjectEAR\META-INF文件夹中,我创建了具有以下结构的jboss-deployment-structure.xml文件:

<?xml version="1.0" encoding="UTF-8"?>
<jboss-deployment-structure xmlns="urn:jboss:deployment-structure:1.0">
   <deployment>
      <dependencies>
        <module name="com.sun.jersey" slot="main" …
Run Code Online (Sandbox Code Playgroud)

java deployment configuration jersey jboss7.x

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

发布EAR文件在WebSphere 8.0上挂起

最近,我们的一些项目在发布到WebSphere 8.0(使用8.0.0.5,8.0.0.6和8.0.0.9测试)时开始挂起,但这并不是一直发生的.

这是正常的安装细节

Installing...
If there are enterprise beans in the application, the EJB deployment process can take several minutes. Do not save the configuration until the process completes.
Check the SystemOut.log on the deployment manager or server where the application is deployed for specific information about the EJB deployment process as it occurs.
ADMA5016I: Installation of ImagesServerEAR started.
ADMA5067I: Resource validation for application ImagesServerEAR completed successfully.
ADMA5058I: Application and module versions are validated with versions of deployment targets.
ADMA5005I: …
Run Code Online (Sandbox Code Playgroud)

java ear websphere websphere-8

9
推荐指数
1
解决办法
1581
查看次数

如何在不使用hibernate.xml配置文件的情况下集成LiquiBase + Spring + Hibernate

我已经阅读了很多有关LiquiBase,Spring和Hibernate之间集成的帖子,但是没有一个适用于我的情况.

我正在开始一个使用Spring和Hibernate的新项目,因此我正在寻找一种在项目生命周期内管理数据库更改的方法.首先我开始使用hbm2ddl然后意识到人们说这在生产环境中不是一个好主意,所以我得出结论LiquiBase是要走的路(所以我认为).

问题是我没有使用hibernate.xml配置文件(我使用LiquiBase找到的所有示例都使用了hibernate.xml),因为我在我的POJO/DB类中使用java注释并且我的hibernate配置已经完成像这样

@Bean
public LocalContainerEntityManagerFactoryBean entityManagerFactoryBean() throws ClassNotFoundException
{
    LocalContainerEntityManagerFactoryBean entityManagerFactoryBean = new LocalContainerEntityManagerFactoryBean();

    entityManagerFactoryBean.setDataSource(dataSource());
    entityManagerFactoryBean.setPackagesToScan(environment.getRequiredProperty(PROPERTY_NAME_ENTITYMANAGER_PACKAGES_TO_SCAN));
    entityManagerFactoryBean.setPersistenceProviderClass(HibernatePersistence.class);

    Properties jpaProterties = new Properties();
    jpaProterties.put(PROPERTY_NAME_HIBERNATE_DIALECT, environment.getRequiredProperty(PROPERTY_NAME_HIBERNATE_DIALECT));
    jpaProterties.put(PROPERTY_NAME_HIBERNATE_FORMAT_SQL, environment.getRequiredProperty(PROPERTY_NAME_HIBERNATE_FORMAT_SQL));
    jpaProterties.put(PROPERTY_NAME_HIBERNATE_NAMING_STRATEGY, environment.getRequiredProperty(PROPERTY_NAME_HIBERNATE_NAMING_STRATEGY));
    jpaProterties.put(PROPERTY_NAME_HIBERNATE_SHOW_SQL, environment.getRequiredProperty(PROPERTY_NAME_HIBERNATE_SHOW_SQL));
    jpaProterties.put(PROPERTY_NAME_HIBERNATE_HBM2DDL_AUTO, environment.getRequiredProperty(PROPERTY_NAME_HIBERNATE_HBM2DDL_AUTO));

    entityManagerFactoryBean.setJpaProperties(jpaProterties);

    return entityManagerFactoryBean;
}
Run Code Online (Sandbox Code Playgroud)

我还发现2年前的帖子说这个选项只能在版本2.0(当前版本)中使用,我想知道这是否已经实现.如果是这样,我如何在ANT脚本中使用它?

我需要创建原始数据库DDL和以下数据库更改日志,并将它们导入生产数据库.

编辑:我正在使用:

Liquibase 2.0.5

Liquibase Hibernate 2.0.0

Hibernate 4.1.4

春季3.1.1

Spring Data JPA 1.1.1

ant spring annotations hibernate liquibase

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

是否有意义不重置版本号中的最后一位数字

我们正在改变我们的中间件(MW)软件的版本控制和依赖系统,我们在这里考虑这样的事情:

a.b.c.d

a - 主要版本

b - 向后兼容性中断

c - 新功能

d - 错误修复

但由于软件的大小和网络速度慢,我们必须将发送给客户端的软件包数量保持在最低限度.

因此,我们的想法是仅在向后兼容性更改时重置错误修复号.使用此逻辑,我们可以创建一个自动系统,如果客户端已经安装的版本有任何错误更改,并且它符合新的FrontEnd(FE)要求,则只生成新包.

为了更好地显示这一切,这里有几个例子:

递增逻辑

递增逻辑

需要包决策逻辑

需要包裹

虽然这是一个非标准的版本控制逻辑,你们看到这个逻辑有什么问题吗?

java versioning product version

8
推荐指数
1
解决办法
174
查看次数

Java getDate 0000/00/00返回奇怪的值

为什么会这样?对于月份和日期,我认为Java假设前一个有效的月份和日期,但我不明白为什么年份是2.

SimpleDateFormat sdf = new SimpleDateFormat("yyyy/MM/dd");
Date result = sdf.parse("0000/00/00");

System.out.println(result.toString());
Run Code Online (Sandbox Code Playgroud)

输出是:

Sun Nov 30 00:00:00 GMT 2
Run Code Online (Sandbox Code Playgroud)

java

8
推荐指数
2
解决办法
2131
查看次数

如何解密 Jenkins 8mha 值

如果我们查看 Jenkins 作业日志,我们可以看到其中包含的文本与查看控制台输出时在浏览器中显示的内容完全相同,除了日志文件中的 URL 是用某些内容编码的标签 [8mha:

有谁知道我们如何“解密”它?

已经尝试了一个简单的 base64 但它不起作用。

这是这些字符串之一

[8mha:AAAAqR+LCAAAAAAAAP9b85aBtbiIQSajNKU4P08vOT+vOD8nVc+jsiC1KCczL9svvyTVzHb1RttJBUeZGJg8GdhyUvPSSzJ8GJhLi3JKGIR8shLLEvVzEvPS9YNLijLz0q0rihik0IxzhtAgwxgggJGJgaGiAMiQL2HQ0c/KT9J3zkhNzs4vLVE1MtAFYpfEkkQg5ZuYl5ieWgRkBbgF65sa6QMAtVXQDbEAAAA=[0m
Run Code Online (Sandbox Code Playgroud)

java encryption jenkins jenkins-plugins

7
推荐指数
1
解决办法
1759
查看次数

春天 - 教程与现实生活

我目前正在将Spring和Hibernate添加到现有应用程序中,但是在阅读了很多教程之后,还有一些(也就是很多东西)对我来说似乎很奇怪或者我错过了一些东西......

我发现的所有教程都是直接的(如大多数教程应该的那样),如示例A所示,一个控制器来处理请求(JSP或WS)并自动装配管理器类以与DB交互.

在我的情况下,这不适用,因为应用程序有一个类来处理请求,然后它实例化一个处理程序类,而处理程序类又创建一个新类来处理创建要处理的新类的其他东西(.... )*然后处理数据库连接,如例B所示.

春天图 - 教程与现实生活

我的问题是如何使我的业务逻辑类n "可弹性",即能够在其中自动装配数据库管理器?

从我见过的所有例子中,我都提出了这些替代方案:

  1. 创建到Controller内部所有 DbManager 的自动装配,然后IoC到所有业务类,直到它到达业务逻辑类n.这将遵循Spring标准,但意味着最多的代码重构
  2. 所有业务逻辑类转换为bean
  3. 添加SpringBeanAutowiringSupport.processInjectionBasedOnCurrentContext(this); 到Business Logic类n并使用@Autowire访问DbManager

我错过了什么或者还有其他选择吗?

java spring hibernate spring-mvc

7
推荐指数
1
解决办法
275
查看次数

QueryDSL中的多个列

我正在尝试使用QueryDSL从我的表中获取多列的列表,并自动填充我的数据库对象,如旧手册中的此示例:

List<CatDTO> catDTOs = query.from(cat)
    .list(EConstructor.create(CatDTO.class, cat.id, cat.name));
Run Code Online (Sandbox Code Playgroud)

问题是看起来在版本2.2.0中删除了EConstructor类,我现在找到的所有示例都是这样的:

List<Object[]> rows = query.from(cat)
    .list(cat.id, cat.name);
Run Code Online (Sandbox Code Playgroud)

这迫使我手动将所有对象强制转换为我的CatDTO类.

有没有替代方案?任何EConstructor替代?

java database querydsl

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

登录-获取方法名称

我们目前正在从log4j迁移到Logback,但是在获取触发日志的“原始”方法名称时遇到了问题。

我之所以称它为“原始”,是因为我们有一个集中式的记录器类(以隐藏和操作某些日志),并且日志中显示的是该集中式类的方法名称。

在log4j中,我们能够正确获取“原始”方法名称。

Logback是否可以获取它?

记录器参数

log4j

<param name="ConversionPattern" value="%d{dd-MM-yyyy HH:mm:ss,SSS} %5p [%F] - %M() - %m%n"/>
Run Code Online (Sandbox Code Playgroud)

登陆回

<pattern>%d{"dd-MM-yyyy HH:mm:ss,SSS"} %-5level [%logger - %M] - %msg%n</pattern>
Run Code Online (Sandbox Code Playgroud)

结果:(方法名称-类名称)

log4j

doLogTester1 - a.Tester1            
doLogTester2 - b.Tester2            
doLogTester1 - a.Tester1            
doLogTester2 - b.Tester2            
Run Code Online (Sandbox Code Playgroud)

登陆回

processLog - a.Tester1              
processLog - b.Tester2              
processLog - a.Tester1              
processLog - b.Tester2              
Run Code Online (Sandbox Code Playgroud)

编辑 -完整示例

Main.java

public class Main
{
private static final LoggerCommon logger = new LoggerCommon(Main.class);

    public static void main(String[] args)
    {
        logger.doLog("I'm on the Main class in …
Run Code Online (Sandbox Code Playgroud)

java logging log4j logback

6
推荐指数
1
解决办法
5224
查看次数