我有一个界面
public interface FooBar<T> { }
Run Code Online (Sandbox Code Playgroud)
我有一个实现它的类
public class BarFoo implements FooBar<Person> { }
通过反射,我想获取BarFoo的一个实例并得到它实现的FooBar版本是Person.
我使用.getInterfaces
BarFoo回到FooBar,但这并没有帮助我找出T是什么.
我有一个可能的输入值列表
val inputValues = List(1,2,3,4,5)
Run Code Online (Sandbox Code Playgroud)
我有一个非常长的计算功能,给我一个结果
def reallyLongFunction( input: Int ) : Option[String] = { ..... }
Run Code Online (Sandbox Code Playgroud)
使用scala并行集合,我可以很容易地做到
inputValues.par.map( reallyLongFunction( _ ) )
Run Code Online (Sandbox Code Playgroud)
为了得到所有结果,并行.问题是,我真的不想要所有的结果,我只想要FIRST的结果.一旦我的一个输入成功,我想要我的输出,并希望继续我的生活.这做了很多额外的工作.
那么我如何才能充分利用这两个世界呢?我想要
编辑 - 我解决它就像一个愚蠢的java程序员一样
@volatile var done = false;
Run Code Online (Sandbox Code Playgroud)
在我的内部设置和检查reallyLongFunction
.这有效,但感觉不太scala.想要一个更好的方法来做到这一点....
我有一个Spring批处理程序,它读取一个文件(我正在使用的示例文件大小约为4 GB),对该文件进行少量处理,然后将其写入Oracle数据库.
我的程序使用1个线程来读取文件,使用12个工作线程来进行处理和数据库推送.
我正在搅拌很多很多年轻的生成内存,这导致我的程序比我想象的要慢.
JDK 1.6.18
弹簧批2.1.x
4核心机16 GB RAM
-Xmx12G
-Xms12G
-NewRatio=1
-XX:+UseParallelGC
-XX:+UseParallelOldGC
Run Code Online (Sandbox Code Playgroud)
有了这些JVM参数,我可以为Tenured Generation提供大约5.x GB的内存,为Young Generation提供大约5.X GB的内存.
在处理这个文件的过程中,我的Tenured Generation很好.它增长到最大可能3 GB,我从来不需要做一个完整的GC.
然而,年轻一代最多次击中它.它高达5 GB范围,然后发生并行次要GC并将Young Gen清除至500MB.Minor GCs比完整的GC更好,但是它仍然会减慢我的程序(我很确定当年轻的gen集合发生时应用程序仍然会冻结,因为我看到数据库活动已经消失).我花费超过5%的计划时间冻结为小型GC,这似乎过多.我会说在处理这个4 GB文件的过程中,我会通过50-60GB的年轻生成内存.
我在程序中没有看到任何明显的缺陷.我试图遵守一般的OO原则并编写干净的Java代码.我试图不要无缘无故地创建对象.我正在使用线程池,并且尽可能传递对象而不是创建新对象.我将开始分析应用程序,但我想知道是否有人有一些好的一般经验法则或反模式,以避免导致过多的内存流失?50-60GB的内存流失是否可以处理4GB文件?我是否必须恢复到像对象池这样的JDk 1.2技巧?(尽管Brian Goetz做了一个演示文稿,其中包括为什么对象池是愚蠢的,我们不再需要这样做.我相信他比我更信任自己...... :))
我想做这样的事情:
INSERT INTO TABLEA
(
COLUMN1, COLUMN2, COLUMN 3
)
SELECT FOOBAR, DOOBAR, ?
FROM TABLEB
Run Code Online (Sandbox Code Playgroud)
然后通过Spring JDBC将其发送给JDBC进行更新......
simpleJdbcTemplate.update( mySqlFromAbove, someVariableToReplaceQuestionMark );
Run Code Online (Sandbox Code Playgroud)
这甚至可能吗?如果我在构建SQL查询时用硬编码的值替换问号,它会正常工作,但我不想打开自己的SQL注入...
编辑 -
我得到
嵌套异常是com.ibm.db2.jcc.c.SqlException:DB2 SQL错误:SQLCODE:-418,SQLSTATE:42610,SQLERRMC:null
这似乎表明
参数标记的使用无效?
我有一个Spring应用程序(Spring Batch不是Web应用程序).在测试类中,我想获取对给定类型的所有bean的访问权限.
我知道在Spring中你通常应该使用IOC并让容器注入你的bean.但是在这种情况下,我想循环遍历给定类(org.springframework.batch.item.database.JdbcCursorItemReader)的可变数量的bean,并做一些事情(希望它是一个只连接的单元/集成测试它到数据库并读取1行,因此我们可以在测试时确认系统中的所有JdbcCursorItemReader都有有效的SQL和行映射器).
问题1)我一次只能获得一个豆子.我可以让我的类实现BeanFactoryAware来获取对beanfactory的引用.然后我可以做beanFactory.getBean("name"); 访问单个bean.我该如何获得所有豆类?我可以遍历并删除不属于我想要的类的那些..但不知何故,我需要beanfactory知道的所有bean的列表或者其他东西.
问题2)我从beanfactory回来的bean是一个代理.如果我尝试强制转换并使用我的bean,我会得到类似 java.lang.ClassCastException:$ Proxy0无法转换为org.springframework.batch.item.database.JdbcCursorItemReader
我对twitter bootstrap carousel有如下愿望:
我下面的例子解决了问题1-3 ..但它打破了4.如果我愿意打破3,我可以很容易地修复4,但这并不好.
Bootply链接到示例:http://bootply.com/88542
HTML:
<!-- Carousel
================================================== -->
<div id="myCarousel" class="carousel slide">
<!-- Indicators -->
<ol class="carousel-indicators">
<li data-target="#myCarousel" data-slide-to="0" class="active"></li>
<li data-target="#myCarousel" data-slide-to="1"></li>
<li data-target="#myCarousel" data-slide-to="2"></li>
</ol>
<div class="carousel-inner">
<div class="item active">
<img src="http://lorempixel.com/1200/600/abstract/1" height="600px" width="1200px">
<div class="container">
<div class="carousel-caption">
<h1>Bootstrap 3 Carousel Layout</h1>
<pthis is="" an="" example="" layout="" with="" carousel="" that="" uses="" the="" bootstrap="" 3="" styles.<="" small=""><p></p>
<p><a class="btn btn-lg btn-primary" href="http://getbootstrap.com">Learn More</a>
</p></pthis></div>
</div>
</div>
<div class="item">
<img …
Run Code Online (Sandbox Code Playgroud) 在Java项目中,我使用的是ojdbc6 jar
<dependency>
<groupId>com.oracle</groupId>
<artifactId>ojdbc6</artifactId>
<version>11.2.0.1.0</version>
<scope>compile</scope>
</dependenc>
Run Code Online (Sandbox Code Playgroud)
我运行一天的第一次,dataSource.getConnection()很快.第二次通常没关系.接下来的几次大约需要45秒.之后,需要几分钟.一旦我有一个给定应用程序运行的FIRST连接,我得到的任何新连接都非常快.此延迟仅为给定运行获取FIRST连接.
是什么让我的第一次连接变得如此缓慢?
我正在观看netstat并且在成功运行后看不到任何连接.尝试了几个不同的连接池(DBCP,C3PO)没有运气.通过源代码调试,org.springframework.jdbc.datasource.DataSourceUtils的延迟是100%:
Connection con = dataSource.getConnection();
Run Code Online (Sandbox Code Playgroud)
有任何想法吗?
编辑了更多细节
1)我正在使用连接池(DBCP或C3PO),它可以保存连接以备将来使用.当我谈到获得新连接时,我的意思是在第一个连接正在使用时......我需要转到数据库并获得新连接.当然,我可以一遍又一遍地从连接池返回并获得相同的连接.但同时获得第二个也很快.
2)我不知道我的DB允许我登录多少个连接.知道这个属性在oracle中的位置吗?
所以使用Scala Play Framework.我有一个代码库但需要以两种方式启动它.一种方法将以Play Netty作为主类启动,并运行网络服务器.第二种方式将运行我自己的主类并做不同的事情.
如果我玩dist(https://www.playframework.com/documentation/2.3.x/ProductionDist)
它最终使用sbt-native插件,并创建一个新的zip.在zip中是一个用主类Netty调用java的脚本.这最终来自于
mainClass in (Compile, run) := Some("play.core.server.NettyServer"),
Run Code Online (Sandbox Code Playgroud)
在PlaySettings.scala里面.
我想保留所有这些,但是为dist添加第二个工件..它只有不同的主类.
我开始尝试制作子项目..但不确定这是我真正想要的.就像是:
lazy val root = Project(
id = "root",
base = file("."),
librar
aggregate = Seq(web, backend)
).dependsOn(web, worker)
lazy val web = Project(
id = "web",
base = file("."),
settings = packageArchetype.java_server ++ Seq(
name := "web",
mainClass in Compile := Some("play.core.server.NettyServer")
)
).enablePlugins(PlayScala)
lazy val backend= Project(
id = "backend",
base = file("."),
settings = packageArchetype.java_server ++ Seq(
name := "backend",
mainClass …
Run Code Online (Sandbox Code Playgroud) 我在Boot.scala中有一个像这样定义的站点地图
def sitemap() = SiteMap(
Menu(S ? "Home") / "index",
Menu(S ? "Login") / "login",
Menu(S ? "Do Logged in Stuff") / "loggedinstuff" >> If( () => loggedInUser.is != Empty, "You must be logged in") )
Run Code Online (Sandbox Code Playgroud)
此外,我在Boot.scala中定义了一个loggedInUser
object loggedInUser extends SessionVar[Box[String]](Empty)
Run Code Online (Sandbox Code Playgroud)
当我有用户登录时,我希望他们将我的loggedInUser更改为他们成功登录的用户名.
我有2个表,包含以下字段.
询问
Select t1.*,
t2.*
from table1 t1,
join table2 t2 on table1.DD = table2.EE
Run Code Online (Sandbox Code Playgroud)
我的数据列返回以下列名称:
AA, BB, CC, DD, **AA_1**, **CC_1**, EE
Run Code Online (Sandbox Code Playgroud)
我不希望列名这样.我希望他们将表名称作为common(或所有列)的名称前缀.我可以解决这个问题:
select t1.AA as t1_AA, t1.BB as t1_BB, t1.CC as t1_CC, t1.DD as t1_DD,
t2.AA as t2_AA, t2.CC as t2_CC, t2.EE as t2_EEE
from table1 t1,
inner join table2 t2
on table1.DD = table2.EE
Run Code Online (Sandbox Code Playgroud)
但这意味着每个地方的每个选择都会变得长500行.在oracle中有没有神奇的方法呢?基本上我想写我的代码
select t1.* as t1_*, t2.* as t2_*
from table1 t1,
inner join table2 …
Run Code Online (Sandbox Code Playgroud) java ×5
jdbc ×2
oracle ×2
scala ×2
spring-batch ×2
sql ×2
alias ×1
column-alias ×1
css ×1
datasource ×1
db2 ×1
html ×1
javabeans ×1
lift ×1
proxy ×1
reflection ×1
sbt ×1
scala-2.9 ×1
spring ×1
spring-jdbc ×1