以下是我的POM中的示例配置文件:
<profiles>
<profile>
<id>QA</id>
<activation>
<activeByDefault>true</activeByDefault>
</activation>
<properties>
<jdbc.url>jdbc:mysql://127.0.0.1:3306/SomeDB</jdbc.url>
<jdbc.username>webapp</jdbc.username>
<jdbc.password>somepassword</jdbc.password>
</properties>
</profile>
...
Run Code Online (Sandbox Code Playgroud)
然后我在我的资源文件夹中有一个属性文件,如下所示:
jdbc.url = ${jdbc.url}
jdbc.username = ${jdbc.username}
jdbc.password = ${jdbc.password}
Run Code Online (Sandbox Code Playgroud)
最后我在我的POM中打开过滤:
<build>
<resources>
<resource>
<directory>src/main/resources</directory>
<filtering>true</filtering>
</resource>
</resources>
...
Run Code Online (Sandbox Code Playgroud)
这实际上是一个简化的例子,但你明白了.基本上我跑的时候
mvn install -P QA
Maven将过滤我的app.properties文件,用配置文件中保存的值替换所有占位符,并部署填充的属性文件.
所有这一切的问题在于我喜欢在Eclipse中使用Servers机制,我在IDE中运行Tomcat.我的项目在这个实例中运行,Eclipse负责更新,重新部署等.然而,在IDE中部署期间,Maven被排除在外,并且此属性文件永远不会正确填充.
那么,如何在IDE中继续运行我的项目,但是是否已正确填充此属性文件?
2009年9月28日,Apache POI项目发布了3.5版本,正式支持Office 2007中引入的OOXML格式,如DOCX和XLSX.
请提供一个代码示例,用于以纯文本格式提取DOCX文件的内容,忽略任何样式或格式.
我问这个是因为我无法找到任何覆盖新OOXML支持的Apache POI示例.
Eclipse在我的Spring的applicationContext.xml中显示以下错误:
cvc-complex-type.2.4.c: The matching wildcard is strict, but no declaration can be found for element 'dwr:configuration'. myappservlet-servlet.xml MyApp/src/main/webapp/WEB-INF line 23 XML Problem
cvc-complex-type.2.4.c: The matching wildcard is strict, but no declaration can be found for element 'dwr:controller'. myappservlet-servlet.xml MyApp/src/main/webapp/WEB-INF line 21 XML Problem
cvc-complex-type.2.4.c: The matching wildcard is strict, but no declaration can be found for element 'dwr:remote'. myappservlet-servlet.xml MyApp/src/main/webapp/WEB-INF line 41 XML Problem
Run Code Online (Sandbox Code Playgroud)
当我将鼠标悬停在订单项错误上时,它还会说:
- schema_reference.4: Failed to read schema document 'http://www.directwebremoting.org/
schema/spring-dwr-3.0.xsd', because 1) could not …Run Code Online (Sandbox Code Playgroud) 假设我的basedir = c:/projects/myapp/1.2
如何在物业中获得"1.2"?
在我的具体案例中,我正在使用一个鉴别器列策略.这意味着我的JPA实现(Hibernate)创建了一个带有特殊DTYPE列的用户表.此列包含实体的类名.例如,我的users表可以包含TrialUser和PayingUser的子类.这些类名称将位于DTYPE列中,以便当EntityManager从数据库加载实体时,它知道要实例化的类的类型.
我尝试过两种转换实体类型的方法,两种方式都像脏黑客一样:
#1的问题是当您手动更改此列时,JPA不知道如何刷新/重新附加此实体到持久性上下文.它需要一个TrialUser ID为1234,而不是一个PayingUser ID为1234它失败了.在这里,我可以做一个EntityManager.clear()并分离所有实体/清除Per.上下文,但由于这是一个Service bean,它将擦除系统所有用户的挂起更改.
#2的问题在于,当您删除TrialUser时,您设置为Cascade = ALL的所有属性也将被删除.这很糟糕,因为您只是尝试交换其他用户,而不是删除所有扩展对象图.
更新1:#2的问题使我几乎无法使用,所以我放弃了尝试让它工作.更优雅的黑客肯定是#1,我在这方面取得了一些进展.关键是首先获得对底层Hibernate Session的引用(如果您使用Hibernate作为JPA实现)并调用Session.evict(user)方法从持久性上下文中仅删除该单个对象.不幸的是,没有纯粹的JPA支持.以下是一些示例代码:
// Make sure we save any pending changes
user = saveUser(user);
// Remove the User instance from the persistence context
final Session session = (Session) entityManager.getDelegate();
session.evict(user);
// Update the DTYPE
final String sqlString = "update user set user.DTYPE = '" + targetClass.getSimpleName() + "' where user.id = …Run Code Online (Sandbox Code Playgroud) 我正在尝试通过Spring的@Configurable注释w/@Resource在需要注入的字段上使用自动依赖注入.这涉及一些设置,比如将spring-agent.jar传递给我的JVM.有关详细信息,请参见此处.
它主要起作用.当我的Tomcat启动时,我看到AspectJ init消息,我的User对象自动获取FileService引用等.
问题是有时它不会发生.它似乎是完全随机的; 有时我启动并且不会注入依赖项,有时它们是.我以前遇到过@Transactional在我的用户上的问题,因为它造成了冲突,我相信代理.我正在使用JPA,因此我的用户标有@Entity,所以我现在最好的猜测是这会产生冲突.我读过你不能自动代理代理.为了抵消冲突,我在网上找到了一些关于排除CGLIB和javassist的注释,这些注释是Hibernate(我的JPA impl)使用的.
线索:
我怎么能弄清楚出了什么问题?是否有人使用@Configurable和JPA?为什么我的dependencyCheck = true在没有实际注入依赖项时抛出错误?
实体
@Entity
@Configurable(dependencyCheck = true)
@NamedQueries( { @NamedQuery(name = "User.findAll", query = "SELECT user FROM User user"),
@NamedQuery(name = "User.findByEmail", query = "SELECT user FROM User user WHERE user.email = :email") })
public abstract class User extends BaseModel {
private static final long serialVersionUID = 7881431079061750040L;
@Id
@GeneratedValue(strategy = GenerationType.TABLE)
private Long id;
@Column(unique = true, nullable = …Run Code Online (Sandbox Code Playgroud) 我最近一直在玩函数式编程,关于副作用的主题有很好的处理方法,为什么要包含它们等等.在使用OOP的项目中,我正在寻找一些资源来规划一些策略.最小化副作用和/或状态.
一个很好的例子是RESTful Web Services一书,它为您提供了最小化Web应用程序状态的策略.还存在其他什么?
请记住,我不是在寻找另一个OOP分析师/设计模式书(尽管良好的封装和松耦合有助于避免副作用),而是主题本身就是状态/副作用的资源.
一些汇编的答案
编辑:似乎至少有两个有效的理由说明为什么Smalltalkers这样做(在消息链接和范围界定问题期间的可读性)但是问题可能会保持更长时间以解决一般用法问题.
原文:由于我早已忘记的原因,我从不在变量名中使用文章.例如:
aPerson,theCar,anObject
我想我觉得文章用无意义的信息弄脏了名字.当我看到使用这个约定的同事的代码时,我的血压会略微上升哦.
最近我开始学习Smalltalk,主要是因为我想学习Martin Fowler,Kent Beck以及其他许多伟大成长和喜爱的语言.
然而,我注意到,Smalltalkers似乎在变量名中广泛使用不定冠词(a,an).一个很好的例子是在下面的Setter方法中:
name: aName address: anAddress.
self name: aName.
self address: anAddress
Run Code Online (Sandbox Code Playgroud)
这使我重新考虑我的立场.如果一个像Smalltalkers一样受到极大尊重和影响的社区已广泛采用变量命名的文章,那么可能有充分的理由.
你用它吗?为什么或者为什么不?
我有一个运行Quartz 1.6.1 w/persistent job store的应用程序,MySQL 5.1作为DB.这个应用程序用于在Tomcat6中启动.在某些时候,它开始在每次启动时抛出以下异常:
- MisfireHandler: Error handling misfires: Failure obtaining db row lock: Lock wait timeout exceeded; try restarting transaction
org.quartz.impl.jdbcjobstore.LockException: Failure obtaining db row lock: Lock wait timeout exceeded; try restarting transaction [See nested exception: java.sql.SQLException: Lock wait timeout exceeded; try restarting transaction]
at org.quartz.impl.jdbcjobstore.StdRowLockSemaphore.executeSQL(StdRowLockSemaphore.java:112)
at org.quartz.impl.jdbcjobstore.DBSemaphore.obtainLock(DBSemaphore.java:112)
at org.quartz.impl.jdbcjobstore.JobStoreSupport.doRecoverMisfires(JobStoreSupport.java:3075)
at org.quartz.impl.jdbcjobstore.JobStoreSupport$MisfireHandler.manage(JobStoreSupport.java:3838)
at org.quartz.impl.jdbcjobstore.JobStoreSupport$MisfireHandler.run(JobStoreSupport.java:3858)
Caused by: java.sql.SQLException: Lock wait timeout exceeded; try restarting transaction
at com.mysql.jdbc.SQLError.createSQLException(SQLError.java:1055)
at com.mysql.jdbc.SQLError.createSQLException(SQLError.java:956)
at com.mysql.jdbc.MysqlIO.checkErrorPacket(MysqlIO.java:3491)
at com.mysql.jdbc.MysqlIO.checkErrorPacket(MysqlIO.java:3423)
at com.mysql.jdbc.MysqlIO.sendCommand(MysqlIO.java:1936)
at com.mysql.jdbc.MysqlIO.sqlQueryDirect(MysqlIO.java:2060)
at …Run Code Online (Sandbox Code Playgroud) 我的同事和我正在讨论发布/ SCM系统中标签的价值和用法.我们期待StackOverflow社区提出他们的想法,以帮助我们解决问题.
一方声称标签是发布管理的有价值的补充.它们的一个使用示例:我们做了一个Maven版本,它发布了一个新的Tag(称之为1.0),这是用于此版本的代码快照.此标记应为READONLY分支.当需要修复bug时,我们可以将Tag的副本复制到一个新的分支中(称之为1.1).错误修复去那里.这些修复程序可能会合并回Trunk,以便主dev分支获取错误修复程序.最后,1.1发布并自动创建Tag 1.1.这个循环继续.Tag的主要好处是,如果您因任何原因需要重新发布版本1.0,您可以放心发布Tag 1.0,并确信它从未被任何人更改过.另外,说"Release Tag 1.0"比说"发布版本1的分支1.0是没有修复的原始1.0"更清晰.
另一方声称标签没有提供任何有价值的好处,特别是在像Subversion这样具有全局修订的系统中,这些系统就像CVS中的标签一样.另外,Subversion仅在提交标签时发出警告; 它实际上并没有阻止它.他们的方法是在Trunk中开发,一旦发布,你就会创建一个名为1.0的Branch.您将继续在Trunk中修复错误,如果您需要将这些错误修复重新发布到生产中,您可以将它们合并到1.0 Branch并重新发布1.0.在某些时候,也许在Trunk中的主要修复或功能之后,您将发布并创建Branch 1.1.循环继续.如果您需要发布原始1.0版本,则必须查看Branch 1.0版本1.
显然这两种方法都有效.我想听听社区对哪种方法首选以及为什么这样做的想法.
编辑:我有点担心"最佳"方式取决于底层的SCM系统.要么在Subversion上找到答案,要么尽可能保持SCM不可知.
eclipse ×2
java ×2
jpa ×2
spring ×2
transactions ×2
annotations ×1
ant ×1
apache-poi ×1
coding-style ×1
docx ×1
dwr ×1
hibernate ×1
jdbc ×1
locking ×1
maven-2 ×1
mysql ×1
openxml ×1
schema ×1
side-effects ×1
smalltalk ×1
state ×1
xlsx ×1
xml ×1