小编fis*_*tte的帖子

如何配置Grunt以通过其缩小版本替换Bower依赖项

我是Yeoman/Grunt/Bower的新手.我有一个bower.json定义以下依赖项的文件:

bower.json

{
    "dependencies": {
        "angular": "~1.0.7",
        "jquery": "~1.8.0",
        "bootstrap": "~2.3.2",
        "angular-grid": "~2.0.5"
    }
}
Run Code Online (Sandbox Code Playgroud)

在我的html文件中,我使用的是那些我通过命令安装的库的非缩小版本 bower install

的index.html

<script src="components/jquery/jquery.js"></script>
<script src="components/bootstrap/docs/assets/js/bootstrap.js"></script>
<script src="components/angular/angular.js"></script>
<script src="components/angular-grid/build/ng-grid.js"></script>
Run Code Online (Sandbox Code Playgroud)

如何配置grunt,它将:

  1. 仅将这些js文件的缩小版本复制到构建目录
  2. 替换HTML所以它会如变更jquery.jsjquery.min.js
  3. 不使用CDN时 - 是否建议将所有文件与自定义应用程序脚本组合在一起?

这里的正确方法是什么?我是否必须在grunt复制任务中定义每个lib?喜欢:

Gruntfile.js:

copy: {
  dist: {
    files: [{
      src: [
        'components/jquery/jquery.min.js',
        'components/bootstrap/docs/assets/js/bootstrap.min.js',
        'components/angular/angular.min.js',
        'components/angular-grid/build/ng-grid.min.js'
      ]
    }]
  }
}
Run Code Online (Sandbox Code Playgroud)

angularjs gruntjs yeoman bower

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

JSF 2.2内存消耗:为什么Mojarra保留了内存中最后25个视图的ViewScoped Beans?

每个会话的内存增长

使用JSF 2.2(2.2.12)和Mojarra,我们正在经历高内存消耗.在研究了我们的负载测试之后,我们发现ViewScoped Beans中的数据大小非常高(有时超过1MB).无论如何 - 当从视图导航到视图时,会话内存大小会增长和增长.我们不能在短期内减少bean的大小,因此这种行为会产生相当大的影响.

解决方案1 ​​ - 更改上下文参数(不工作)

现在 - 我们使用了Mojarra的官方上下文参数,默认情况下设置为15:

com.sun.faces.numberOfLogicalViews
com.sun.faces.numberOfViewsInSession
Run Code Online (Sandbox Code Playgroud)

将这些参数更改为较低的值对我们的负载测试中的内存消耗没有任何影响.

解决方案2 - 更改activeViewMapsSize(工作)

我们正在调试Mojarra并在以下代码中找到以下代码ViewScopeManager:

Integer size = (Integer) sessionMap.get(ACTIVE_VIEW_MAPS_SIZE);
if (size == null) {
    size = 25;
}
Run Code Online (Sandbox Code Playgroud)

保留上次访问的视图的默认大小似乎是25.看到这一点,我们实现了一个Session Listener,它将此值设置为1:

public class SetActiveViewMapsSizeSessionListener implements HttpSessionListener {
    @Override
    public void sessionCreated(HttpSessionEvent event) {
        event.getSession().setAttribute(ViewScopeManager.ACTIVE_VIEW_MAPS_SIZE, 1);
    }
}
Run Code Online (Sandbox Code Playgroud)

这显然有效.由于只保留了1个视图,因此内存停止增长.

为什么25个内存中的观点?

因此,如果Session中没有定义不同的值,Mojarra会保留25个内存视图的历史记录.我找不到任何关于此的文档.有人可以解释这是为了什么?它是针对浏览器的吗?我们在JSF页面上禁用了缓存.因此浏览器将始终创建一个新视图.这不应成为我们的问题.

解决方案2是有效的方法吗?有人可以解释这种方法的缺点吗?

更新1

经过各种评论和更深入的调试后,结果证明:

  • com.sun.faces.numberOfLogicalViews 定义logicalViewMap大小,该大小仅存储(!)ui组件树的状态
  • com.sun.faces.application.view.activeViewMapsSize 定义activeViewMap的大小,它包含ViewScoped bean

当更改numberOfLogicalViews为1时,mojarra仍会跟踪过去25个视图中的所有视图范围内的bean.当你以相反的方式配置它 - numberOfLogicalViews从15 activeViewMapsSize到1时 - 由于我猜想缺少数据,因此无法正确初始化视图.我们甚至没有例外.我想理解,为什么mojarra选择设置activeViewMapsSize高于numberOfLogicalViews和不高,因为我们想调整内存消耗而不会产生不可预测的行为.

更新2 …

jsf mojarra jsf-2.2

23
推荐指数
1
解决办法
3833
查看次数

将唯一违规例外传播到UI的最佳做法

我们正在开发基于JPA 2,Hibernate,Spring 3和在Tomcat 7中运行的JSF 2的Java Web项目.我们使用Oracle 11g作为数据库.

我们目前正在讨论将数据库约束违规填充为用户友好消息的方法.或多或少我们看到两种方式,两种方式都不令人满意.有人可以提供一些建议吗?

方法1 - 以编程方式验证并抛出特定异常

在CountryService.java中,将验证每个Unique约束并抛出相应的异常.异常在辅助bean中单独处理.

优点:易于理解和维护.特定用户消息可能.

缺点:很多代码只是为了拥有好消息.基本上所有DB约束都会在应用程序中重新编写.很多查询 - 不必要的db加载.

@Service("countryService")
public class CountryServiceImpl implements CountryService {

    @Inject
    private CountryRepository countryRepository;

    @Override
    public Country saveCountry(Country country) throws NameUniqueViolationException,  IsoCodeUniqueViolationException, UrlUniqueViolationException {
        if (!isUniqueNameInDatabase(country)) {
            throw new NameUniqueViolationException();
        }
        if (!isUniqueUrl(country)) {
            throw new UrlUniqueViolationException();
        }
        if (!isUniqueIsoCodeInDatabase(country)) {
            throw new IsoCodeUniqueViolationException();
        }
        return countryRepository.save(country);
    }
}
Run Code Online (Sandbox Code Playgroud)

在View的Backing Bean中,您可以处理异常:

@Component
@Scope(value = "view")
public class CountryBean {

    private Country country;

    @Inject
    private CountryService …
Run Code Online (Sandbox Code Playgroud)

jsf spring hibernate jpa constraints

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

如何在html文件中为每个块定义useminPrepare中的个别流?

我们在index.html中定义了2个块 - 一个用于第三方库,一个用于我们的应用程序文件.由于第三方库已经缩小,我们只想连接它们,但不是uglify.我怎么能这样做useminPrepare

<!-- build:js js/lib.js -->
<script src="lib/angular/angular.min.js"></script>
<script src="lib/angular-cookies/angular-cookies.min.js"></script>
<script src="lib/angular-route/angular-route.min.js"></script>
<!-- endbuild -->

 <!-- build:js js/app.js -->
<script src="js/app.js"></script>
<script src="js/controllers/LanguageCtrl.js"></script>
<!-- endbuild -->
Run Code Online (Sandbox Code Playgroud)

gruntfile.js:

useminPrepare: {
        html: '<%= yeoman.app %>/index.html',
        options: {
            dest: '<%= yeoman.dist %>',
            flow: {
                html: {
                    steps: {
                        // TODO for libs.js block I don't want uglify!
                        js: ['concat', 'uglifyjs'], 
                        css: ['cssmin']
                    },
                    post: {}
                }
            }
        }
    }
Run Code Online (Sandbox Code Playgroud)

uglifyjs angularjs gruntjs grunt-usemin

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

我已经进行了Integration-Tests,是否应该为CRUD操作编写单元测试?

在我们最近的项目中,Sonar抱怨测试覆盖率很低.我们注意到它默认不考虑集成测试.除了你可以配置Sonar,它会考虑它们(JaCoCo插件),我们正在讨论我们团队中的问题,如果确实需要编写单元测试,当你用集成测试覆盖所有服务和数据库层时无论如何.

我对集成测试的意思是,我们所有的测试都是针对我们在生产中使用的相同类型的专用Oracle实例运行的.我们不会嘲笑任何东西.如果服务依赖于其他服务,我们将使用真实服务.在运行测试之前我们需要的数据,我们通过一些使用我们的服务/存储库(DAO)的工厂类来构建.

因此,从我的角度来看 - 为简单的CRUD操作编写集成测试,尤其是在使用Spring Data/Hibernate等框架时,这并不是一件大事.它有时甚至更容易,因为你没有想到什么以及如何模仿.

那么为什么我应该为我的CRUD操作编写单元测试,因为我可以编写的集成测试不太可靠?

我看到的唯一一点是集成测试将花费更多时间来运行,项目得到的越大.因此,您不希望在办理登机手续之前全部运行它们.但是我不确定这是不是很糟糕,如果你有一个CI环境,Jenkins/Hudson会做这个工作.

所以 - 任何意见或建议都非常感谢!

spring integration-testing unit-testing hibernate crud

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

如何列出由angular-translate加载的所有语言

我无法在角度翻译的 docs或api中找到它.如何通过角度翻译检索所有加载的语言?

假设我有一个像这样的LanguageCtrl:

angular.module('myApp')
.controller('LanguageCtrl', ['$translate', '$scope',
    function ($translate, $scope) {
        $scope.switchLang = function (lang) {
            $translate.use(lang);
        };
        $scope.currentLang = function () {
            return  $translate.use();
        };
        $scope.isCurrentLang = function (lang) {
            return  $translate.use() === lang;
        };
        $scope.languages = function(){
            return $translate.IS_THERE_AN_API_FUNCTION_TO_GET_ALL_LANGUAGES();
        }
    }]);
Run Code Online (Sandbox Code Playgroud)

我加载这些语言:

angular.module('myApp', ['pascalprecht.translate'])
.config(['$translateProvider', function ($translateProvider) {
    $translateProvider.translations('de', de);
    $translateProvider.translations('fr', fr);
    $translateProvider.translations('en', en);
    $translateProvider.preferredLanguage('en');
}]);
Run Code Online (Sandbox Code Playgroud)

现在我想显示所有语言:

<ul ng-controller="LanguageCtrl">
    <li ng-repeat="lang in languages" ng-class="{active: isCurrentLang(lang)}">
            <a href="" ng-click="switchLang(lang)">lang</a>
     </li>
</ul>
Run Code Online (Sandbox Code Playgroud)

javascript angularjs

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

如何以编程方式为 Spring 中的集成测试填充测试数据?

我正在寻找使用 spring/spring boot 在集成测试中以编程方式填充测试数据的推荐方法。我正在使用 HSQLDB(内存中)。

有可能在 spring 中执行 SQL 脚本来进行这样的集成测试:

@Test
@Sql({"/test-schema.sql", "/test-user-data.sql"})
public void userTest {
    // execute code that relies on the test schema and test data
}
Run Code Online (Sandbox Code Playgroud)

我想以编程方式在一个集成测试中为多个测试方法插入数据,而不是编写 SQL 脚本:

@RunWith(SpringJUnit4ClassRunner.class)
@SpringApplicationConfiguration(classes = BookstoreApp.class)
@IntegrationTest
public class BookRepositoryTest {
    @Autowired
    private BookRepository bookRepository;

    @Before // not working
    public void setUp() throws Exception {
        bookRepository.save(new Book("Donald Duck 1", "Walt Disney", "0-14-020652-3"));
        bookRepository.save(new Book("Donald Duck 2", "Walt Disney", "0-14-020652-4"));
        bookRepository.save(new Book("Micky Mouse", "Walt Disney", "0-14-020652-5"));
    }

    @Test …
Run Code Online (Sandbox Code Playgroud)

spring spring-test spring-data spring-boot

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

Swagger / OpenAPI:如何在构建过程中集成Typescript / Angular客户端的生成?

使用swagger-codegen-maven-plugin的Java / Spring服务器存根生成

在我的Spring Boot Java项目中,我正在使用swagger-codegen-maven-plugin从Swagger 2.0 api.yml生成Spring MVC控制器接口(服务器存根)。Maven构建过程中的集成非常简单。就像我以前使用WSDL的jaxws-maven-plugin一样,它的工作原理类似。这是带有swagger-codegen的pom.xml中的示例配置。它生成服务器端模型和mvc接口:

<plugin>
    <groupId>io.swagger</groupId>
    <artifactId>swagger-codegen-maven-plugin</artifactId>
    <version>2.2.3</version>
    <executions>
        <execution>
            <goals>
                <goal>generate</goal>
            </goals>
            <configuration>
                <inputSpec>/api/api-v2.yml</inputSpec>
                <language>spring</language>
                <apiPackage>io.fischermatte.test.api</apiPackage>
                <modelPackage>io.fischermatte.test.api.model</modelPackage>
                <output>${project.build.directory}/generated</output>
                <configOptions>
                    <interfaceOnly>true</interfaceOnly>
                    <sourceFolder>/src/main/java</sourceFolder>
                    <library>spring-mvc</library>
                    <dateLibrary>java8</dateLibrary>
                </configOptions>
            </configuration>
        </execution>
    </executions>
</plugin>
Run Code Online (Sandbox Code Playgroud)

但是,如何在客户端角度应用程序的npm构建过程中集成相同的东西呢?

现在,我正在尝试在我的角度应用程序的npm构建过程中集成客户端代码的生成。我有一个api.yml,它基于Swagger 2.0定义我的其余端点。我希望npm构建生成类似于此typescript-angular-v4.3示例的api模块。据我所知,没有npm的官方软件包能像使用maven时swagger-codegen-maven-plugin那样做。

我在这里误会了吗?上面提到的示例已经是结果,但是推荐的达到目标的方法是什么?在基于npm的项目中进行这样的集成不是可行的方法吗?应该手动执行并将生成的打字稿文件检入sources目录吗?

npm swagger typescript openapi angular

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

如何使用“ng e2e”针对节点服务器而不是 webpack-dev-server 运行量角器测试

使用 webpack-dev-server 对 prod 包运行 e2e 测试

在 Angular 中,可以使用以下命令针对 prod 构建运行量角器测试

"e2e:prod": "ng e2e --prod" 
Run Code Online (Sandbox Code Playgroud)

这将构建 prod 包,启动 webpack-dev-server 并运行量角器。一旦完成,webpack-dev-server 将被关闭。无论如何,这不是我们正在寻找的......见下文

量角器完成后如何关闭节点服务器?

对于我们的持续集成,我们希望 e2e 测试针对节点服务器而不是 webpack-dev-server 运行。所以我们尝试启动节点服务器,然后运行量角器测试。

为此,我们在我们的 ci 服务器执行的 package.json 中引入了一个新脚本:

npm run e2e:ci
Run Code Online (Sandbox Code Playgroud)

解决方案 1 - 同时使用(不工作):

"e2e:ci": "concurrently -k \"npm:e2e:ci:serve\" \"npm:e2e:ci:protractor\"",
"e2e:ci:serve": "node server.js",
"e2e:ci:protractor": "ng e2e --base-url=http://localhost:8080/ --dev-server-target="
Run Code Online (Sandbox Code Playgroud)

这个解决方案几乎有效。有--dev-server-target=没有目标将停止角度打造束(我们对角7)。e2e:ci:serve启动节点服务器,假设 prod 包是在之前构建的,因此可以提供服务。但是- 一旦量角器完成,它将杀死节点服务器,因此它以代码 1 存在:

--> Sending SIGTERM to other processes..
[serve:server] npm run serve:server exited with code 1
npm …
Run Code Online (Sandbox Code Playgroud)

node.js npm protractor angular-cli angular

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

使用Spring @Async和ThreadPoolTask​​Scheduler,pool-size = 1

我们在基于Spring的Web应用程序中有一个服务实现,它增加了db中的一些统计计数器.由于我们不想弄乱用户的响应时间,因此我们使用Spring的@Async异步定义它们:

public interface ReportingService {

    @Async
    Future<Void> incrementLoginCounter(Long userid);

    @Async
    Future<Void> incrementReadCounter(Long userid, Long productId);
}
Run Code Online (Sandbox Code Playgroud)

和spring任务配置如下:

<task:annotation-driven executor="taskExecutor" />
<task:executor id="taskExecutor" pool-size="10" />
Run Code Online (Sandbox Code Playgroud)

现在,有pool-size="10"两个线程尝试两个线程时,我们会遇到并发问题,创建包含计数器的相同初始记录.

这里设置pool-size="1"避免这些冲突是一个好主意吗?这有副作用吗?我们有很多地方可以触发异步操作来更新统计信息.

java spring asynchronous threadpool threadpoolexecutor

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

如何在firestore集合中生成并保证独特的价值?

假设我们order在 firestore 中有一个集合,其中每个订单都需要有一个唯一的可读随机订单号,假设为 8 位数字:

{
    orderNumber: '19456734'
}
Run Code Online (Sandbox Code Playgroud)

因此,对于每个传入订单,我们都希望生成这个唯一的编号。firestore 中建议使用什么方法来确保没有其他文档正在使用它?

注意:一种解决方案是在保存之前查询现有文档,但这在多个订单同时到达的并发场景中不起作用(?)。

consistency firebase google-cloud-firestore

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