小编Jac*_*ack的帖子

如何在Eclipse/SpringSource Tool Suite中更改源文件夹的顺序

我正在使用SpringSource Tool Suite开发Java Maven项目.我有标准的Maven目录结构

src
-> main
   -> java
   -> resources
-> test
   -> java
   -> resources
Run Code Online (Sandbox Code Playgroud)

该结构在.pom文件中定义:

<build>
    <resources>
        <resource>
            <directory>src/main/java</directory>
            <includes>
                <include>**</include>
            </includes>
            <excludes>
                <exclude>**/*.java</exclude>
            </excludes>
        </resource>
        <resource>
            <directory>src/main/resources</directory>
        </resource>
    </resources>

    <testResources>
        <testResource>
            <directory>src/test/java</directory>
            <includes>
                <include>**</include>
            </includes>
            <excludes>
                <exclude>**/*.java</exclude>
            </excludes>
        </testResource>
        <testResource>
            <directory>src/test/resources</directory>
        </testResource>
    </testResources>
</build>
Run Code Online (Sandbox Code Playgroud)

STS首先显示测试分支中的源文件夹,然后显示主分支中的源文件夹.所以我得到这样的东西:

src/test/java
src/test/resources
src/main/java
src/main/resources
Run Code Online (Sandbox Code Playgroud)

但是,我想首先从主分支中获取文件夹.关于如何改变这个的任何想法?

eclipse maven

14
推荐指数
2
解决办法
7449
查看次数

使用Spring Expression Language以编程方式评估bean表达式

我有一个简单的Spring Bean Expression,当我在应用程序上下文文件中定义它时,它会很好地评估:

<bean id="myConfigBean" class="com.example.myBeanConfigBean">
    <property name="myProperty" value="#{ someOtherBean.getData() }"/>
</bean>
Run Code Online (Sandbox Code Playgroud)

现在,我想以编程方式进行相同的评估.我使用了以下代码:

final ExpressionParser parser = new SpelExpressionParser();
final TemplateParserContext templateContext = new TemplateParserContext();
Expression expression = parser.parseExpression("#{ someOtherBean.getData() }", templateContext);
final String value = (String) expression.getValue();
Run Code Online (Sandbox Code Playgroud)

这引发了一个异常:

EL1007E:(pos 22): Field or property 'someOtherBean' cannot be found on null
Run Code Online (Sandbox Code Playgroud)

我想我必须以某种方式设置一个根对象,允许配置的bean像属性一样.但我还没有让它工作.任何人,已经做过这个并且可以给出一个提示吗?

java spring spring-el

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

使用 HSQLDB 选择 INTO

我正在尝试根据选择的结果创建一个新表。这适用于 SQL Server:

SELECT * INTO newTable FROM (SELECT col1, col2, col3 FROM oldTable) x;
Run Code Online (Sandbox Code Playgroud)

现在,我想用 HSQLDB(2.2 版)实现完全相同的功能。我尝试了几种形式,例如

SELECT * INTO newTable FROM (SELECT col1, col2, col3 FROM oldTable);
SELECT INTO newTable FROM SELECT col1, col2, col3 FROM oldTable;
CREATE TABLE newTable AS SELECT col1, col2, col3 FROM oldTable;
Run Code Online (Sandbox Code Playgroud)

所有这些变体都会导致某种形式的语法错误。如何使用 HSQLDB 从选择中创建表?

sql database select hsqldb

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

使用JDBC检索给定表的所有索引

我想编写一个SpringBatch Tasklet,它自动激活或取消激活给定数据库表的所有索引.代码需要独立于DBMS(需要SQL Server,Oracle和HSQLDB).

这是我到目前为止所尝试的:

DatabaseMetaData dbMetaData = connection.getMetaData();
ResultSet rs = dbMetaData.getIndexInfo(null, null, tableName, true, false);
while (rs.next()) {
    // work with ResultSet
}
Run Code Online (Sandbox Code Playgroud)

但是,我没有获得索引的名称或任何有用的信息.

那么,任何人都可以提供一些关于如何使用JDBC连接对象将表的所有索引设置为活动或非活动的提示吗?

java indexing jdbc

5
推荐指数
1
解决办法
7742
查看次数

使用@SpringBean将ApplicationContext注入Wicket组件失败

我有一个带Wicket的Spring项目.我可以使用@SpringBean注释在Wicket组件中成功注入服务.

现在,我想访问Spring Application Context.所以我已经声明了一个ApplicationContext类型的成员变量,并使用@SpringBean注释它,就像其他服务一样:

尝试使用@SpringBean注入Application

public class MyPanel extends Panel {

    @SpringBean
    private ApplicationContext applicationContext;

    ...
}
Run Code Online (Sandbox Code Playgroud)

但是,在运行时,这会给出错误

bean of type [org.springframework.context.ApplicationContext] not found
Run Code Online (Sandbox Code Playgroud)

是否无法将ApplicationContext注入Wicket组件?如果是这样,那么访问ApplicationContext的合适方式是什么?

java spring wicket applicationcontext

4
推荐指数
1
解决办法
3580
查看次数

Spring服务中允许有实例变量吗?

我有一个提供配置数据的 spring 服务。当 GUI 调用该服务时,它会从数据库加载配置数据。事实证明,这种情况在单个请求的渲染过程中经常发生。我想通过缓存配置数据来优化它。但是,我不确定这是否是一种好的编程风格,或者是否“允许”在服务中拥有实例变量。

这是我正在考虑做的一些示例代码:

@Serivce("MyConfigService")
public class MyConfigServiceImpl implements MyConfigService {

    private Config cachedConfig;

    @Override
    public Config loadConfig() {
        if (cachedConfig != null) {
            // load config
            cachedConfig = loadedConfig;
        }
        return cachedConfig;
    }

    @Override
    public saveConfig(Config config) {
        cachedConfig = null;
        // save the configuration
    }
}
Run Code Online (Sandbox Code Playgroud)

java service spring

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

在事务中进行弹簧批处理作业

我有一个简单的Spring-Service(除其他任务外)使用以下代码启动spring批处理作业:

@Autowired
private JobRegistry jobRegistry;

@Autowired
private JobLauncher jobLauncher;

public void startMyJob() {
    Job job = jobRegistry.getJob("myJobName");
    JobParameters jobParameters = new JobParametersBuilder().toJobParameters();
    jobLauncher.run(job, jobParameters);
}
Run Code Online (Sandbox Code Playgroud)

只要调用Serivce-Method时没有活动的事务,此方法就可以正常工作。但是,对于一个活跃的交易,我得到了这个异常:

Caused by: java.lang.IllegalStateException: Existing transaction detected in JobRepository. Please fix this and try again (e.g. remove @Transactional annotations from client).
Run Code Online (Sandbox Code Playgroud)

我无法轻易删除现有事务,因为由于某些框架代码不在我的控制范围内而隐含了该事务。

那么,在这种情况下我该如何开始工作呢?新作业不应使用现有事务。它可以只是开始自己的事务-但是如何配置它以使其正常工作?

java spring transactions spring-batch

4
推荐指数
3
解决办法
9005
查看次数

用Guice注入Map的值

我有一个Guice托管服务,注入了一些其他服务.根据传递给我的服务方法的键值使用其他服务.所以我想制作一个Map将要使用的服务映射到相应的密钥:

@Inject
private IServiceA serviceA;

@Inject
private IServiceB serviceB;

private Map<String, IService> mapping;

private Map<String, IService> getMapping() {
    if (mapping == null) {
        mapping = new HashMap<String, IService>();
        mapping.put("keyA", serviceA);
        mapping.put("keyB", serviceB);
    }
}

@Override
public void myServiceMethod(String key) {
    IService serviceToUse = getMapping().get(key);
    // ... use some methods of the identified service
}
Run Code Online (Sandbox Code Playgroud)

这个解决方案有效,但看起来很尴尬,因为我必须对映射进行这种懒惰的初始化.我试图使用一个static块,但此时Guice尚未初始化实例成员.

我更愿意直接用Guice注入映射值,但我不知道如何实现这一点.

java dependency-injection guice

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