小编bwa*_*wok的帖子

如何获得具体类型的通用接口

我有一个界面

public interface FooBar<T> { }
Run Code Online (Sandbox Code Playgroud)

我有一个实现它的类

public class BarFoo implements FooBar<Person> { }

通过反射,我想获取BarFoo的一个实例并得到它实现的FooBar版本是Person.

我使用.getInterfacesBarFoo回到FooBar,但这并没有帮助我找出T是什么.

java reflection

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

Scala Parallel Collections-如何提前返回?

我有一个可能的输入值列表

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的结果.一旦我的一个输入成功,我想要我的输出,并希望继续我的生活.这做了很多额外的工作.

那么我如何才能充分利用这两个世界呢?我想要

  1. 获取第一个返回我的long函数的结果
  2. 从无用的工作中停止我所有的其他线程.

编辑 - 我解决它就像一个愚蠢的java程序员一样

@volatile var done = false;
Run Code Online (Sandbox Code Playgroud)

在我的内部设置和检查reallyLongFunction.这有效,但感觉不太scala.想要一个更好的方法来做到这一点....

parallel-processing scala scala-2.9

14
推荐指数
1
解决办法
968
查看次数

减少内存流失的方法

背景

我有一个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做了一个演示文稿,其中包括为什么对象池是愚蠢的,我们不再需要这样做.我相信他比我更信任自己...... :))

java garbage-collection memory-management spring-batch

10
推荐指数
2
解决办法
6107
查看次数

使用select和parameters执行DB2插入

我想做这样的事情:

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
这似乎表明
参数标记的使用无效?

sql db2 jdbc spring-jdbc

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

访问给定类型的所有spring bean

我有一个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

java proxy spring javabeans spring-batch

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

twitter-bootstrap中心轮播图像无论屏幕大小

我对twitter bootstrap carousel有如下愿望:

  1. 当屏幕比旋转木马更大时,我希望图像居中.
  2. 当屏幕小于旋转木马时,我想只看到图像的PART.图像的这一部分应居中.
  3. 在任何时候都不应调整图像大小或缩放图像
  4. 过渡应该有效.

我下面的例子解决了问题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)

html css twitter-bootstrap

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

Oracle getConnection运行缓慢

在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中的位置吗?

java oracle datasource jdbc

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

sbt多个本机包

所以使用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)

sbt playframework sbt-native-packager

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

提升跟踪登录用户

我在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更改为他们成功登录的用户名.

  • 这是处理用户登录的好方法吗?
  • 我应该在哪里保留我的loggedInUser对象.Boot.scala?别的地方?
  • 如何更新loggedInUser以便他现在可以显示"loggedinstuff"页面?

java scala lift session-state

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

Oracle自动重命名列中的列?

我有2个表,包含以下字段.

表格1

  • AA
  • BB
  • CC
  • DD

表2

  • AA
  • CC
  • EE

询问

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)

sql oracle alias column-alias

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