小编Kon*_*ine的帖子

使用Springboot计划的websocket推送

一般来说,我对弹簧靴和弹簧都有点新意.我被投入了一个项目,我的第一个"练习"是为了让我的脚湿透是在前端创建一个简单的新闻提要功能,它将通过websocket推送通知自动更新.

涉及的技术是:

  • Angular用于一般的前端应用程序
  • SockJS用于创建websocket通信
  • 踩踏webosocket以接收来自消息代理的消息
  • Springboot Websockets
  • Stomp Message Broker(java相关框架)

我想在前端实现的目标是:

  1. 加载视图时创建websocket连接
  2. 使用该websocket创建s stomp提供程序
  3. 让我的客户订阅它
  4. Catch服务器推送消息并更新角度视图

至于服务器端代码:

  1. 配置websocket东西并管理连接
  2. 让服务器每隔X个时间推送消息(通过执行程序或@Scheduled?).

我认为除了服务器端代码的最后部分之外,我已经实现了所有目标.我以下的示例在全双工模式下使用websocket,当客户端发送内容时,服务器立即响应消息队列并且所有订阅的客户端都更新.但我想要的是服务器本身发送一些东西Stomp而不等待客户端发出任何请求.

起初我创建了一个spring @Controller并使用@SendTo("/my/subscribed/path")注释添加了一个方法.但是我不知道如何触发它.我也尝试添加,@Scheduled但这个注释仅适用于具有void返回类型的方法(我正在返回一个NewsMessage对象).

基本上我需要的是让客户端初始化一个websocket连接,并在服务器开始按设定的时间间隔推送消息之后(或者每当触发一个事件时,它现在无关紧要).此外,每个新客户端都应该侦听相同的消息队列并接收相同的消息.

java spring push-notification websocket spring-boot

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

使用源映射和webpack调试typescript

我有使用Typescript编写的项目,我希望能够调试它(在Chrome Dev Tools或中Intellij).

起初我看到了Typescript的import功能不受支持.所以我试图用Webpackwebpack dev server但这完全失败了.即使我的应用程序正在运行(由于只有一个bundle.js包含所有代码的文件),它也无法将代码与给定的源映射匹配,这使调试变得不可能.

我停止使用webpack后,我尝试添加require.js作为依赖项来解决require is not defined我得到的错误.这工作但现在我再次陷入困境并得到这个:

未捕获的ReferenceError:未定义导出

我不知道为什么这不起作用.我想让我的应用程序工作(通过webpack或能够在转换后解析import语句)并且仍然能够使用typescript生成的source-maps调试代码.我怎样才能做到这一点?

我正在附加我的配置文件,以防有些东西丢失:

tsconfig.json

{
  "compilerOptions": {
    "module": "commonjs",
    "target": "es6",
    "sourceMap": true
  },
  "include": [
    "scripts/**/*"
  ],
  "exclude": [
    "node_modules"
  ]
}
Run Code Online (Sandbox Code Playgroud)

webpack.config.js:

module.exports = {
    resolve: {
        extensions: [/*'.ts', '.tsx', */'.js']
    },
    entry: './scripts/main.js',
    output: {
        path: '/',
        filename: 'app.js'
    },
    module: {
        rules: [
            { test: /\.js$/, loader: 'source-map-loader', enforce: 'pre' …
Run Code Online (Sandbox Code Playgroud)

debugging intellij-idea source-maps typescript webpack

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

从 jaxb xjc 一代迁移到 jakarta 和 Java 17

我们正在研究将应用程序从 JDK8 迁移到 JDK17。我们的一些模块使用基于 wsdl 的 Web 服务,其他一些模块使用 .xsd 模式等。无论如何,我们使用 JAXWS 和 JAXB api,这些 API 现在已从 JDK 版本 11 中删除并移至 Jakarta。

我已成功开始使用 jakarta 依赖项从 .wsdl 和 .xsd 文件生成源代码,并且使用 jakarta 导入正确生成了源代码

import jakarta.xml.bind.JAXBElement;
import jakarta.xml.bind.annotation.XmlAccessType;
import jakarta.xml.bind.annotation.XmlAccessorType;
import jakarta.xml.bind.annotation.XmlElementRef;
Run Code Online (Sandbox Code Playgroud)

而以前它使用的javax.xml.bind.东西在编译时不再可用。我的问题是,虽然我已经成功生成了基于模式的源,但新生成器生成了不同的代码(类名、访问器等),我想在继续重构之前确认这是预期的行为。

例子:

我们的 .xsd 包含以下内容:

<xsd:complexType name="ForkStepType">
    <xsd:annotation>
        <xsd:appinfo>
            <jxb:class name="ForkStep"/>
        </xsd:appinfo>
    </xsd:annotation>
    <xsd:complexContent>
        <xsd:extension base="tns:LinearStepType">
            <xsd:sequence/>
            <xsd:attribute name="forkLevel" type="tns:ForkLevelType" use="required"/>
        </xsd:extension>
    </xsd:complexContent>
</xsd:complexType>
Run Code Online (Sandbox Code Playgroud)

使用 jaxb 版本的xjc生成器2.2.11将生成一个名为 的类ForkStep,我根据该jxb:class元素猜测。3.0.1另一方面,雅加达生成器生成一个名为ForkStepType我猜测来自 …

java xsd java-platform-module-system jakarta-ee java-17

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

在Java 8中没有预定义方法的情况下将集合转换为另一种集合类型

我正在寻找的是一种使用地图将一种类型的集合转换为另一种类型的集合的方法WITHOUT具有将对象A转换为对象B的预定义函数/功能接口.Java 6示例:

for (ObjectA objA : collectionA) {
    ObjectB objB = new ObjectB();
    objB.setId(objA.getId());
    collectionB.add(objB);
}
Run Code Online (Sandbox Code Playgroud)

我正在寻找以下内容:

List<ObjectB> collectionB = collectionA.stream().map(objA -> {
    ObjectB objB = new ObjectB();
    objB.setId(objA.getId());
    return objB;
});
Run Code Online (Sandbox Code Playgroud)

这当然不起作用,但你得到了我正在努力做的事情的要点.

java collections java-8

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

如何在lambda迭代和正常循环之间做出决定?

自从他引入Java 8以来,我真的迷上了lambdas,并且尽可能地开始使用它们,主要是为了开始习惯它们.最常见的用法之一是当我们想要迭代并对一组对象进行操作时,在这种情况下我要么求助于forEach或者stream().我很少写旧for(T t : Ts)循环,我差点忘了for(int i = 0.....).

然而,我们前几天与我的主管讨论过这个问题,他告诉我,lambdas并不总是最好的选择,有时会阻碍性能.从我在这个新功能上看过的一个讲座中我感觉lambda迭代总是被编译器完全优化,并且(总是?)比裸迭代更好,但他不同意.这是真的?如果是,我如何区分每种方案中的最佳解决方案?

PS:我不是在谈论建议申请的案例parallelStream.显然那些会更快.

java iteration lambda jvm java-8

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

在GoLang应用程序中使用C(++)来提高性能

我几天前就开始研究Go了,它来自CGO的东西和gccgo编译器.根据我的理解,这允许使用Go编译器编译Go程序并使用C编译器编译C库并从Go程序内引用这些库.这对我来说非常有趣,因为这使我们可以从主程序中利用C的性能(如果需要),而且开销很小.

但是我不确定那是多么的少,所以我在这里问:

是否有创建C库的情况只是为了在Go应用程序中使用它?或者此功能仅用于促进现有C代码的重用性?

PS:我认为目前CGO不支持C++,但是有人发表了一篇能够使用C函数包装C++代码并成功调用它们的帖子.

c c++ go gccgo

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

如何在不构建项目的情况下更新gradle依赖项

我正在寻找一种方法来刷新我的 gradle 依赖项,而无需重建项目。我正在使用 Intellij 及其 Gradle Wrapper。我尝试从 IntelliJ 的 gradle UI 运行任务“依赖项”,我尝试运行命令gradle --refresh-dependenciesAND gradlew --refresh-dependencies,两者都不起作用。让 gradle 下载新依赖项的唯一方法是从 IntelliJ UI 使用Refresh All Gradle Project,但我不喜欢这样做,因为当我只想刷新依赖项时,gradle 会自动运行一些我不想运行的任务。

java intellij-idea gradle

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

创建一个将收听电报频道的应用程序

首先请注意,这与创建机器人无关

我的目标是创建一个应用程序,该应用程序将仅侦听我将为其提供的帐户所订阅的任意数量的电报频道,并检索发送到这些频道的所有消息(就像我是普通用户一样)。我的猜测是我将需要

  • 使用我帐户的电话号码进行身份验证
  • 能够为每个传入消息设置每个通道的回调侦听器或常规侦听器

我已经观察telegram api了几天,对它的工作方式感到非常困惑。放弃它之后,我开始研究现成的实现,主要是为了实现,NodeJS但仍然找不到具体的解决方案。我正在用telegram-js api测试某些东西,但是直接使用它运行node不起作用。是否需要在浏览器中运行?还有其他简化方法吗?最好是有良好文档的东西。

PS:我主要精通Java和Javascript,因此我已根据这些语言对库进行了优先排序。

编辑:

这是我编写的代码(本质上是复制示例)

var { Telegram } = require("../libs/telegram");
var TypeLanguage = require("telegram-tl-node") ;
var MTProto = require("telegram-mt-node");

var schema = require("../libs/api-schema.json");

const APP_ID = "111111";
const APP_HASH = "fb6da8f6abdf876abd6a9d7bf6";
const SERVER = { host: "111.111.111.11", port: "443" };
const config = {
  id: APP_ID,
  hash: APP_HASH,
  version: '0.0.1',
  lang_code: 'en',
  authKey: null
};

let telegram = new Telegram(MTProto, TypeLanguage);
telegram.useSchema(schema);
addPublicKeys(telegram);

let …
Run Code Online (Sandbox Code Playgroud)

node.js telegram

6
推荐指数
2
解决办法
771
查看次数

IntelliJ中的调试gradle任务

我正在尝试在调试模式下运行任务并让它在断点处停止但它似乎不起作用.任务正常执行但IDE给我一个套接字错误:

运行MyProject [myTask]时出错:无法打开调试器端口(127.0.0.1:52550):java.net.SocketException

请注意,它尝试使用的端口会在每次尝试时更改.我想VM Options:在任务配置中添加一些东西,但我不知道是什么.

debugging intellij-idea gradle

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

在Spring中操作配置属性

我正在寻找一种方法来操纵@ConfigurationProperties在初始化时定义的方法,以便在@Inject / @Autorwired使用@Bean方法配置的对象正确配置时。

场景:

我在.yml文件中设置了一堆属性。因为所有这些属性都匹配为字符串,所以其中一些需要特殊处理才能正确配置为各自的类型(其中一些是枚举)。我是否使我的属性对象a @Component然后将其注入@Bean方法并对其进行修改?我尝试合并@Bean@ConfigurationProperties注释,但是在@Bean方法本身返回之后配置了对象,因此任何操作都丢失/不可能。做这个的最好方式是什么?

例子:在我.yml我有这个:

properties:
  sports:
    "football": ["Team 1", "Team 2", "Team 3"]
    "basketball": ["Team 4", "Team 5", "Team 6"]
  settings:
    "football":
      "period1": "45"
      "period2": "90"
      "players": "11"
    "basketball":
      "periods": "4"
      "players": "5"
Run Code Online (Sandbox Code Playgroud)

这些与以下对象匹配:

Map<SportsEnum, List<TeamsEnum>
Map<SportsEnum, Map<SportSettingsEnum, String>>
Run Code Online (Sandbox Code Playgroud)

TL; DR:我想从.yml/.properties文件中获取配置的对象并操纵其可注射表示。请提供具体示例!

java spring spring-boot

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